最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[已解决]swift切换视图控制器时传递数据

Swift crifan 2807浏览 0评论

需要在切换视图控制器时传递数据

[解决过程]

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才可以?
而我此处是:完全是代码实现页面跳转的,所以没有被调用到?
然后把
        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切换视图控制器时传递数据

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
84 queries in 0.186 seconds, using 22.06MB memory