尝试在另一个视图控制器中禁用按钮的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的按钮。
我的问题是,我仍然可以点击按钮,就像它启用一样。对不起,我无法发布代码,请帮帮我!
由于
答案 0 :(得分:1)
您可以从第二个视图控制器发布通知,并在第一个视图控制器中添加该特定发布通知的观察者。
在该观察者方法中,您可以执行诸如禁用第一个视图控制器按钮的用户交互之类的内容。
答案 1 :(得分:0)
由于您没有发布任何相关代码,我只能猜测可能发生的事情:
我假设您没有访问正确的 viewcontroller的btnFirst
。在ViewControllerA.viewDidLoad
中,您正在创建ViewControllerB
的新实例并设置关闭。你是否也正好显示了这个视图控制器的视图?或者用户如何导航到B?如果您正在使用故事板segues,那些将创建一个新的B实例并显示其视图。现在当你在A中执行闭包时,这将禁用第一个B的按钮,而不是显示的B的按钮。
但这只是一个猜测......