Lol*_*ola 8 uiviewcontroller ios swift ios8
我有两个控制器,我需要调用第一个控制器到第二个控制器的功能:在第二个控制器中,我在类中创建了协议和init委托:
protocol testProtocol {
func testDelegate() // this function the first controllers
}
class SecondViewController: UIViewController {
var delegate: testProtocol?
....
}
@IBAction func testDelegateClicked(sender : AnyObject) {
delegate?.testDelegate()
}
Run Code Online (Sandbox Code Playgroud)
第一控制器
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
Run Code Online (Sandbox Code Playgroud)
但功能没有被调用
Fir*_*iro 12
我假设您正在使用故事板.如果我是正确的,那么您的问题是您secondController在第一个控制器中创建的不是您提供的实际控制器.你需要设置secondController你的prepareForSegue:
不变
class ViewController: UIViewController, testProtocol {
// you will want to add the ? since this variable is now optional (i.e. can be nil)
var secondController: SecondViewController? // don't assign it a value yet
// ...
// implementation of the protocol
func testDelegate() {
println("Hello delegate")
}
// your prepare for segue
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
// get the controller that storyboard has instantiated and set it's delegate
secondController = segue!.destinationViewController as? SecondViewController
secondController!.delegate = self;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12006 次 |
| 最近记录: |