【问题标题】:How can I disable a button if an image has not been edited?如果图像尚未编辑,如何禁用按钮?
【发布时间】:2018-08-10 16:28:32
【问题描述】:

我想尝试禁用发布按钮,直到用户选择了图像。

但是,我将默认图像设置为占位符。当文本字段未填充信息时,我已经设法禁用发布按钮。但是,我还没有找到立即禁用按钮的方法。希望我已经解释了自己。

Here's an image of my uiview

func handleBlancInformation(){
    address.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged)
    breed.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged)
    phone.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged)

}


@objc func textFieldDidChange() {
    guard let address = address.text, !address.isEmpty,
            let breed = breed.text, !breed.isEmpty,
            let phone = phone.text, !phone.isEmpty,
            let image = imagePosted.image, !imagePosted.isEqual("placeholder.png")
        else {
        postButton.setTitleColor(UIColor.lightText, for: UIControlState.normal)
            postButton.isEnabled = false
            return
    }
    postButton.setTitleColor(UIColor.white, for: UIControlState.normal)
    postButton.isEnabled = true
}

【问题讨论】:

    标签: swift button uiimage isenabled


    【解决方案1】:

    我需要更多的代码来给出一个精确的解决方案,但是这样想:

    无论您使用什么方法让用户选择新图片,您都应该启用“发布”按钮。

    例如,假设您使用 UIImagePickerViewController 来处理选择图像,您需要在此方法中启用“发布”按钮,这是 UIImagePickerControllerDelegate 的一部分:

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
         if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
              //Enable button here
         } else {
              //Disable button here
         }
    }
    

    【讨论】:

    • 我使用您的解决方案 + Pedro 的解决方案从一开始就禁用 postButton,然后在 imagePickerController 中关闭我为 textFields 设置代码!非常感谢!!
    【解决方案2】:

    据我了解,用户可以在加载视图时单击,而您想阻止这种情况吗?

    但是当他们第一次进入uiview时,他们可以点击发布按钮

    如果是这样,只需禁用 viewDidLoad() 或情节提要中的按钮。

    override func viewDidLoad() {
        postButton.isEnabled = false
    }
    

    或取消选中“启用”字段

    要验证用户是否选择了图像(在视图加载后)检查 Greg 的answer

    【讨论】:

    • 嗨佩德罗!这确实有效!但是,有没有办法应用相同的逻辑,以便在选择图片并且还选择文本字段之后才启用 postButton?
    【解决方案3】:

    试试这个。使用 bool 来检查天气图像是否被选中。

    var isImageSelected = false
    

    override func viewDidLoad() { postButton.isEnabled = false }

    检查图像是否被选中。选择图像时更改按钮启用属性。

    if isImageSelected{
    // Do Your Work
    }
    

    【讨论】:

      【解决方案4】:

      这就是我如何设法使按钮从用户进入此选项卡的那一刻起消失,并在 uiimage 和文本字段都被填写后显示它。

       override func viewDidLoad() {
      
              handleBlancInformation()
              postButton.isHidden = true
      
          }
      
      
      func handleBlancInformation(){
                  address.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged)
                  breed.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged)
                  phone.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged)
                  changeImageLostButton.addTarget(self, action: #selector(PostViewController.textFieldDidChange), for: UIControlEvents.editingChanged )
              }
      
              @objc func textFieldDidChange() {
                  guard let address = address.text, !address.isEmpty,
                          let breed = breed.text, !breed.isEmpty,
                          let phone = phone.text, !phone.isEmpty
                      else {
                          postButton.isHidden = true
                          return
                  }
                  postButton.isHidden = false
              }
      
      
              func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
      
              {
                  print("did Finish Picking Media")
                  if let image = info["UIImagePickerControllerOriginalImage"] as? UIImage {
                      selectedImage = image
                      imagePosted.image = image
                  }
      
                  else {
      
                      postButton.isHidden = true
      
                  }
                  self.dismiss(animated: true, completion: {
      
                      self.handleBlancInformation()
      
                  })
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 2016-03-25
        • 2011-02-19
        相关资源
        最近更新 更多