禁用另一个视图控制器中1个视图控制器的按钮

时间:2017-09-06 09:28:28

标签: ios swift closures

尝试在另一个视图控制器中禁用按钮的1个视图控制器的用户交互时遇到问题。

我在这里搜索过类似的问题,但是有些问题似乎已经过时或者对我不起作用: How to access an IBOutlet from another class

我的方案如下:

class ViewControllerA() {

  @IBOutlet weak var btnFirst: UIButton!
  @IBOutlet weak var btnSecond: UIButton!
  @IBOutlet weak var btnThird: UIButton!

  override func viewDidLoad() {
    var vcB = ViewControllerB()
    vcB.closure = {
    // Meet some condition, want to disable buttons of ViewControllerA here
    }
  }

}

class ViewControllerB() {
   var closure: () -> Void = {}
   // Do something with closure here
}

我的问题是我在闭包中设置断点并尝试在闭包中直接使用IBOulet来禁用以下按钮:

btnFirst.isUserInteractionEnabled = false

或者尝试在ViewControllerB的闭包中设置ViewControllerA的属性并使用属性观察者,每当此属性更改时,启用或禁用ViewControllerA的按钮。

我的问题是,我仍然可以点击按钮,就像它启用一样。对不起,我无法发布代码,请帮帮我!

由于

2 个答案:

答案 0 :(得分:1)

您可以从第二个视图控制器发布通知,并在第一个视图控制器中添加该特定发布通知的观察者。

在该观察者方法中,您可以执行诸如禁用第一个视图控制器按钮的用户交互之类的内容。

答案 1 :(得分:0)

由于您没有发布任何相关代码,我只能猜测可能发生的事情:

我假设您没有访问正确的 viewcontroller的btnFirst。在ViewControllerA.viewDidLoad中,您正在创建ViewControllerB的新实例并设置关闭。你是否也正好显示了这个视图控制器的视图?或者用户如何导航到B?如果您正在使用故事板segues,那些将创建一个新的B实例并显示其视图。现在当你在A中执行闭包时,这将禁用第一个B的按钮,而不是显示的B的按钮。

但这只是一个猜测......