我读过了这个线程(以及类似的其他)从下到上,但它根本不符合我的需求。
我有一个UIViewController
inside UIPageViewController
在一个UINavigationController
。导航到第二个 ViewController。导航到第三个 ViewController 并想要返回到第二个 ViewController 来传递数据。
我目前的代码:
protocol PassClubDelegate {
func passClub(passedClub: Club)
}
class My3rdVC: UIViewController {
var clubs: [Club] = []
var passClubDelegate: PassClubDelegate?
....
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let club = clubs[indexPath.row]
self.passClubDelegate?.passClub(club)
navigationController?.popViewControllerAnimated(true)
}
我的第二个风险投资家:
class My2ndVC: UIViewController, PassClubDelegate {
var club = Club()
func passClub(passedClub: Club) {
SpeedLog.print("passClub called \(passedClub)")
club = passedClub
}
passClub
不被调用。我确信这是因为我没有将委托设置为 My2ndVC,但我该怎么做呢?我发现的所有解决方案都希望我使用 a) segue 或 b) 实例化一个新的 My2ndVC,这没有任何意义,因为它仍在内存中,我想弹出以返回层次结构。我缺少什么?我的可能性有哪些?非常感谢帮助。
PS:我没有使用任何segues。 My3rdVC 被调用:
let vc = stb.instantiateViewControllerWithIdentifier("My3rdVC") as! My3rdVC
self.navigationController?.pushViewController(vc, animated: true)
您可以设置委托My3rdVC
in the prepareForSegue
的方法My2ndVC
.
class My2ndVC: UIViewController, PassClubDelegate {
...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
super.prepareForSegue(segue, sender: sender)
switch segue.destinationController {
case let controller as My3rdVC:
controller.passClubDelegate = self
}
}
}
这是假设您在故事板中创建了一个segue来推动My3rdVC
from My2ndVC
到导航控制器堆栈上,我假设您已经有了。所以只要尝试简单地粘贴这个prepareForSegue
方法进入My2ndVC
看看它是否有效。
UPDATE
let vc = stb.instantiateViewControllerWithIdentifier("My3rdVC") as! My3rdVC
vc.passClubDelegate = self
navigationController?.pushViewController(vc, animated: true)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)