两个视图控制器之间的快速代表没有segue
我的委托协议从来没有调用
我的第一个控制器 – ViewController
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 ") } }
为什么testDelegate()永远不会调用ViewController? 我究竟做错了什么? 谢谢。
我已经阅读了很多关于这个的post,但是所有的例子都是用segue过渡的,我不想用segue。
通常你在prepareForSegue:
设置一个新的视图控制器的委托属性。 你说你没有使用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()
。
最后,您通常希望使委托属性变弱,所以我build议更改var delegate : testProtocol?
weak var delegate: testProtocol?
我会读一下代表团。 这是一个相对简单的5步到授权的过程,可以帮助您:
5个步骤的代表团:
对象A是对象B的委托,对象B将发送消息:
- 定义对象B的委托协议
- 给对象B一个可选的委托variables。 这个variables应该很弱。
- 当有些事情发生时,使对象B向其代理发送消息,例如用户按下“取消”或“完成”button,或者当需要一条信息时。
- 使对象A符合委托协议。 它应该把协议的名称放在它的类中,并且实现协议中的方法。
- 告诉对象B对象A现在是它的委托(在prepareForSegue(sender)中)。
- AVAssetResourceLoaderDelegate不被调用
- 以编程方式触发摇动事件iOS
- 试图实现委托inheritance
- 自定义setter方法的委托被称为无限次
- iBeacon:didRangeBeacons停止呼叫,必须重置设备才能重新工作
- iOS我可以把所有的委托方法放在另一个类上。 将代表inheritance到视图控制器
- 9在Swift上实现Nuance语音识别,不能听onResult,onError …事件
- 目标C iPhone开发中的“委托”是什么?
- Apple Push – didReceiveIncomingPushWithPayload未被调用 – 而是错误:发送消息失败到客户端