【问题标题】:Change title button from another class从另一个类更改标题按钮
【发布时间】:2020-11-24 15:31:00
【问题描述】:

请帮助如何从另一个类更改标题按钮

要更改的类

protocol ChangeButtonDelegate: class {
    func changeButton(sender: UIButton)
}

class SubscribeVC : UIViewController {
    @IBAction func tryButtonAction(_ sender: UIButton) {
        delegate?.changeButton(sender: sender)
        subscribeCheck = true
        view.removeFromSuperview()
    }
}

在这个类中要更改的按钮

class OrderVC: UIViewController, ChangeButtonDelegate {

override func viewDidLoad() {
        super.viewDidLoad()
        
        subscribe.delegate = self
}

func changeButton(sender: UIButton) {
        orderButton.setTitle("Check", for: .normal)
    }
}

【问题讨论】:

  • 您的按钮操作中有view.removeFromSuperview()...您是否将SubscribeVC 添加为来自OrderVCchild 视图控制器?还是您介绍 SubscribeVC
  • 订购和订阅我添加到父控制器,SubscribeVC 存在

标签: ios swift uibutton delegates


【解决方案1】:

你的问题不清楚。

如果您询问如何进入另一个视图控制器并更改按钮的标题,答案是“不要那样做”。

您应该将视图控制器的视图层次结构视为私有的。如果您想提供更改按钮标题的功能,请添加方法setOrderButtonTitle(_ newTitle: String)。在该方法的实现中,将按钮的标题设置为新字符串,然后在需要更改按钮标题时调用该方法(尽管请注意,在加载视图控制器之前,您不能更改视图控制器的视图。)

【讨论】:

  • 我需要点击一个按钮并在另一个控制器中更改按钮的标题
  • 所以照我说的做,给另一个视图控制器添加一个方法。您可以将方法命名为 setOrderButtonTitle(_ newTitle: String)。在另一个控制器中,您将获取字符串按钮标题并将其应用于按钮。
  • 请注意,如果您在显示视图控制器之前告诉其他视图控制器更改其按钮标题,则必须保存更改的按钮标题并将其应用到viewDidLoad()
  • 控制器已经加载完毕,如何调用这个函数?
  • "控制器已经加载。"我不知道那是什么意思。
【解决方案2】:

如果您展示 SubscribeVC,请将您的按钮操作更改为:

@IBAction func tryButtonAction(_ sender: UIButton) {
    delegate?.changeButton(sender: sender)
}

并将OrderVC 中的委托函数更改为:

func changeButton(sender: UIButton) {
        orderButton.setTitle("Check", for: .normal)
        // dismiss the presented VC
        dismiss(animated: true, completion: nil)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多