【问题标题】:Make a button inactive until all buttons have had photo uploaded to them使按钮处于非活动状态,直到所有按钮都上传了照片
【发布时间】:2020-11-19 13:06:24
【问题描述】:

我正在尝试使按钮处于非活动状态,直到按钮被按下并且它们的背景图像已被更改。我开始使用关于文本字段的类似问题的相同代码。正如我所料,我遇到了很多错误,因为我不知道将某些代码更改为什么,但这里是:

override func viewDidLoad() {
    super.viewDidLoad()
                     
    requestPaymentButton.layer.cornerRadius = 20
    requestPaymentButton.isEnabled = false
    [story1Button, story2Button].forEach({ $0.addTarget(self, action: #selector(imageChanged), for: .editingChanged) })
    
                         }

@objc func imageChanged(_ button: UIButton) {
    if button.currentBackgroundImage == nil {
        if button.currentBackgroundImage ==  {
            textField.text = ""
            return
        }
    }
    guard
        let story1 = story1Button.currentBackgroundImage, // (story1 has no background image),
        let story2 = story2Button.currentBackgroundImage, (//story2 has no background image)
    else {
        requestPaymentButton.isEnabled = false
        return
    }
     requestPaymentButton.isEnabled = true
}

我有代码可以更改每个按钮并删除它们的初始图像,因此它只显示图像。我希望在每个按钮的背景图像更改后,该按钮变为活动状态。任何帮助都会很棒。

编辑:

这是如何挑选图像的代码:

 internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
    
    if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerOriginalImage")] as? UIImage
    {
        
        if flag == 1
        {
            
            story1Button.setBackgroundImage(image, for: .normal)
            story1Button.setImage(UIImage.init(named: "Default"), for: .normal)
        }
        else if flag == 2
        {
            
            story2Button.setBackgroundImage(image, for: .normal)
            story2Button.setImage(UIImage.init(named: "Default"), for: .normal)
        }
        else if flag == 3
        {
            
            story3Button.setBackgroundImage(image, for: .normal)
            story3Button.setImage(UIImage.init(named: "Default"), for: .normal)
            }
        else if flag == 4
        {
            
            analytics1Button.setBackgroundImage(image, for: .normal)
            analytics1Button.setImage(UIImage.init(named: "Default"), for: .normal)
            }
        else if flag == 5
        {
            
            analytics2Button.setBackgroundImage(image, for: .normal)
            analytics2Button.setImage(UIImage.init(named: "Default"), for: .normal)
            }
        else if flag == 6
        {
            
            analytics3Button.setBackgroundImage(image, for: .normal)
            analytics3Button.setImage(UIImage.init(named: "Default"), for: .normal)
            }
        }
    
         self.dismiss(animated: true, completion: nil)
    
}

【问题讨论】:

  • 很难按照你的要求去做。您展示了很多带有甚至不存在的变量的代码(textFieldhabitgoal 等)您能否将代码缩减为两个按钮和两个文本字段或其他任何内容并描述它们如何交互(为什么isEmpty 等)?
  • 我编辑了它。我希望一个按钮处于非活动状态,直到一些按钮将图像上传到其背景图像。
  • 这里是相同概念但带有文本字段的链接:stackoverflow.com/questions/34941069/…
  • 那么改变背景图片的代码在哪里呢?那就是你需要检查是否所有按钮都有一个的地方。
  • 我编辑了代码以显示该功能。我可以显示按钮何时被点击,但我认为它不适用。

标签: ios iphone uibutton swift5


【解决方案1】:

我建议如下:

  • viewDidLoad 中删除所有forEach / addTarget 处理程序内容
  • 删除func imageChanged

imagePickerController中,调用一个检查方法来检查所有按钮是否都有图像,如下所示:

internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerOriginalImage")] as? UIImage
    {
       // same as above, if if if ...
        
        checkImages()
    }
    self.dismiss(animated: true, completion: nil)
}

private func checkImages() {
    if story1Button.currentBackgroundImage != nil &&
        story2Button.currentBackgroundImage != nil 
        /* ... */ {
        requestPaymentButton.isEnabled = true
    } else {
         requestPaymentButton.isEnabled = false
    }
}

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多