使某个按钮处于非活动状态,直到所有按钮都上传了照片



我正试图使按钮处于非活动状态,直到按下按钮并更改其背景图像。我从一个关于文本字段的类似问题开始使用相同的代码。我得到了很多错误,正如我所期望的,因为我不知道将某些代码更改为什么,但它是:

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)

}

我建议如下:

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

最新更新