iOS页面跳转、传值小笔记

一、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

你可能感兴趣的:(iOS页面跳转、传值小笔记)