使按钮处于非活动状态,直到所有按钮都已将照片上传到它们
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
}
}
我正在尝试使按钮处于非活动状态,直到按下按钮并且更改了它们的背景图像。我开始使用与文本字段相关的类似问题中的相同代码。正如我所料,我收到了很多错误,因为我不知道将某些代码更改为什么,但这里是:
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
中删除所有 - 删除
func imageChanged
forEach
/ addTarget
处理程序内容
在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
}
}