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