【发布时间】:2017-07-03 09:59:35
【问题描述】:
我正在尝试使用自定义协议从另一个视图控制器更改一个视图控制器的标签,但它的委托方法没有被调用
ViewController3 代码:
当我点击关闭按钮时,我的 ViewController2 中没有调用它的委托方法。
protocol ViewController3Delegate: class {
func changeLable(_ text: String)
}
class ViewController3: UIViewController {
weak var delegate: ViewController3Delegate?
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func btnCloseAction(_ sender: Any) {
delegate?.changeLable("fillter applied")
self.dismiss(animated: true, completion: nil)
}
}
ViewController2 代码:
class ViewController2: UIViewController,ViewController3Delegate {
@IBOutlet weak var lblReport: UILabel!
let VC3 = ViewController3(nibName: "ViewController3", bundle: nil)
override func viewDidLoad() {
super.viewDidLoad()
VC3.delegate = self
}
func changeLable(_ text: String) {
print("delegate called")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
谁知道我错在哪里,请给我一些解决方案
【问题讨论】:
-
由于您没有将
VC3.view添加为子视图,我怀疑您有两个ViewController3实例。在ViewController2中作为您的财产(您看不到)和我们看不到代码的财产。也许由 Storyboard 实例化。ViewController2sbtnCloseAction被调用,但其delegate未设置。 -
@shallowThought 解决方案是什么,我尝试了很多替代方案,但都不起作用。
-
你了解我的嫌疑人吗?
-
nope.我没有得到我有带有 3 个控制器的标签栏控制器,当我点击第二个标签时,会出现一个视图并关闭按钮操作当前视图控制器被解雇并想要更改可见视图控制器的标签.对于所有 3 个控制器,我正在使用 xib
-
您正在此处创建
ViewController3:let VC3 = ViewController3(nibName: "ViewController3", bundle: nil)。但你从不使用它。因此你看不到它。因为你看不到它,所以你不能按它上面的按钮。删除整行以发现它不会以任何方式改变您的应用程序的行为。您发布的代码未显示您实际看到的ViewController3,因此如果没有更多信息,我们将无法提供帮助。
标签: ios swift3 delegates swift-protocols