需要在切换视图控制器时传递数据
[解决过程]
1.搜:
swift pass data between view controllers
参考:
-》
prepareForSegue
-》
然后去当前要跳转的VC中,实现了:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { print("prepareForSegue: segue=\(segue), sender=\(sender)") }
然后调试了一下,点击跳转下一个VC,结果根本没有调用
-》估计是:这个函数prepareForSegue,是只有通过Storyboard才可以?
而我此处是:完全是代码实现页面跳转的,所以没有被调用到?
搜:
swift pass data between view controllers programmatically
参考:
然后去:
然后把
let messageTableVC = MessageTableViewController() self.showViewController(messageTableVC as UIViewController, sender: messageTableVC)
改为:
let messageTitleStr:String = (curCell.textLabel?.text)! let messageTableVC = MessageTableViewController(titleStr: messageTitleStr) self.showViewController(messageTableVC as UIViewController, sender: messageTableVC)
对应的第二个VC:
class MessageTableViewController: UIViewController
中,新增了对应的属性变量,并且加了对应的init函数:
class MessageTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { //pass from caller var titleStr:String = "" init(titleStr:String){ self.titleStr = titleStr super.init(nibName: nil, bundle: nil) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
即可实现传值。
[总结]
VC1切换到VC2时,想要将VC1中的值,传递给VC2,则可以:
方法1:
VC2中,新加一个(属性)变量valueInVC2,然后VC1切换到VC2时,对于VC2的实例,直接设置值即可:
VC1中跳转的代码:
let vc2Instance = VC2() vc2Instance.valueInVC2 = valueInVC1ToPass //switch from VC1 to VC2 self.showViewController(vc2Instance as UIViewController, sender: VC2)
VC2中的代码:
class VC2:UIViewController{ var valueInVC2:YourValueType }
方法2:
道理类似上面,但是是把VC2中的变量,作为init初始化函数
VC1中:
let vc2Instance = VC2(valueForInit: valueInVC1ToPass) //switch from VC1 to VC2 self.showViewController(vc2Instance as UIViewController, sender: VC2)
VC2中:
class VC2: UIViewController{ //pass from caller var valueInVC2:ValueType init(valueForInit:ValueType){ self.valueInVC2 = valueForInit super.init(nibName: nil, bundle: nil) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
即可。
-》其实可以看出,不论哪种方法,其实只是:
VC2中弄个变量,VC1要切换(显示)VC2之前,对于已经new出来的实例,(直接设置或作为初始化变量去)赋值对应的变量即可。
转载请注明:在路上 » [已解决]swift切换视图控制器时传递数据