Ios 不带segue的两视图控制器之间的swift委托 我的代理从未打过电话
我的第一个控制器-ViewControllerIos 不带segue的两视图控制器之间的swift委托 我的代理从未打过电话,ios,swift,cocoa-touch,delegates,Ios,Swift,Cocoa Touch,Delegates,我的第一个控制器-ViewController class ViewController: UIViewController,testProtocol { @IBAction func btInit(sender: AnyObject) { println("Bt Init") let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let init
class ViewController: UIViewController,testProtocol {
@IBAction func btInit(sender: AnyObject) {
println("Bt Init")
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as targetViewController
self.presentViewController(initViewController,animated: false, nil)
}
var targetController = targetViewController();
override func viewDidLoad() {
super.viewDidLoad()
self.targetController.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func testDelegate(){
println(" in my view controller delegate ")
}
}
在我的第二个视图控制器-targetViewController中
protocol testProtocol {
func testDelegate() // this function the first controllers
}
class targetViewController: UIViewController {
@IBAction func BtTarget(sender: AnyObject) {
println("bt target pressed")
delegate?.testDelegate()
}
var delegate : testProtocol?
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func testDelegate(){
println(" in my target view controller delegate ")
}
}
为什么从来没有在ViewController上调用testDelegate()?我做错了什么?谢谢
我读过很多关于这方面的帖子,但是所有的例子都是关于segue transition的,我不想使用segue 通常在
prepareforsgue:
中设置新视图控制器的委托属性。您说过您没有使用segue,所以您需要实例化第二个视图控制器并以某种方式呈现它。您可以通过执行以下操作来实现此目的:
let storyboard = UIStoryboard(name: "AStoryboardName", bundle: nil)
let secondVC = storyboard.instantiateViewControllerWithIdentifier(anIdentifier) as! targetViewController
secondVC.delegate = self
presentViewController(secondVC, animated: true, completion: nil)
在两个视图控制器中都有一个testDelegate()
方法,但您只希望在第一个视图控制器中使用它。然后,您的第二个视图控制器可以在适当的时间调用delegate?.testDelegate()
最后,您通常希望使委托属性变弱,因此我建议将var delegate:testProtocol?
更改为弱var delegate:testProtocol?
我会仔细阅读有关代表团的资料。以下是一个相对简单的5步授权流程,可以帮助您:
分5步委派:
对象A是对象B的委托,对象B将发送以下消息:
@user2718075太好了,很高兴听到!你好!首先,谢谢。你的解释很好。但是如果两者之间有风险投资呢?例如,VC1表示VC2,后者表示VC3。VC3希望VC1做一些工作。在VC2中没有segue和编程VC3调用的情况下,如何执行步骤#5!?!