使按钮处于非活动状态,直到所有按钮都已将照片上传到它们

Make a button inactive until all buttons have had photo uploaded to them

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

override func viewDidLoad() {
    super.viewDidLoad()
                     
    requestPaymentButton.layer.cornerRadius = 20
    requestPaymentButton.isEnabled = false
    [story1Button, story2Button].forEach({ [=10=].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)
    
}

我建议如下:

  • 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
    }
}