一、performSegueWithIdentifier
performSegueWithIdentifier(identifier: String, sender:AnyObject?)
(1)假如storyboard里的某个控件直接ctl-drag连线到要跳转的页面,在代码里是无需加performSegueWithIdentifier的。因为此时的sender就是self(控件本身)。
(2)假如页面进行传值或其他原因,页面间先连线,此时记得加上传值的方法prepareForSegue(),再在代码里使用performSegueWithIdentifier进行跳转。
注意:performSegueWithIdentifier执行前会先调用prepareForSegue() 方法,在这个方法里就可以进行传值了。
例子:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
performSegueWithIdentifier("Detail", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Detail" {
if let indexPaths = collectionView.indexPathsForSelectedItems() {
let desController = segue.destinationViewController as! UINavigationController
let detailController = desController.viewControllers[0] as! DetailController
detailController.imageName = images[indexPaths[0].row] //传值
}
}
}
二、prepareForSegue()
用segue时,正常执行顺序:源Controller的 prepareForSegue() —>目的Controller的 ViewDidLoad()。
注意:当segue的执行方式是popver时,执行顺序会颠倒:目的Controller的 ViewDidLoad() —>源View Controller的 prepare for segue()。这时就不能将view controller的值传到目的controller了。
若要进行传值,解决方案参考stackoverflow:
http://stackoverflow.com/questions/8838160/prepareforsegue-is-not-called-after-performseguewithidentifier-with-popover-st