在 StoryBoard 中传递价值
Posted
技术标签:
【中文标题】在 StoryBoard 中传递价值【英文标题】:Passing Value in StoryBoard 【发布时间】:2016-10-13 07:32:38 【问题描述】:我想在 storyboard 中通过 init 传递值。在 xib 中使用的这段代码运行良好。但是在情节提要中,我的应用程序崩溃了。这是我的代码 sn-ps 请帮助任何帮助将不胜感激。
在FirstviewController中
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
viewControllerd = storyboard.instantiateViewControllerWithIdentifier("a") as? SecondViewController
viewControllerd = SecondViewController.init(title: "helo")
addViewControllerAsChildViewController(viewControllerd!)
第二视图控制器
init(title : String)
a = title
super.init(nibName: "SecondViewController", bundle: nil)
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)!
【问题讨论】:
请显示崩溃日志。 【参考方案1】:viewControllerd = SecondViewController.init(title: "helo")
用
替换代码viewControllerd.title = "helo"
并且不需要以下代码:
init(title : String)
a = title
super.init(nibName: "SecondViewController", bundle: nil)
【讨论】:
比在 SecondViewController 类中创建日期变量并传递如下:viewControllerd.date = Date() 或替换 init(title : String, date:Date) a = title super.init(nibName: "SecondViewController", bundle: nil) 【参考方案2】:您的代码一团糟。
由于双重设置为viewControllerd
,应用程序可能会崩溃。
它被定义为常量 (let
),但您为其设置了两次值:viewControllerd = storyboard.instantiateViewControllerWithIdentifier("a") as? SecondViewController
和 viewControllerd = SecondViewController.init(title: "helo")
。
此外,super.init(nibName: "SecondViewController", bundle: nil)
在您使用情节提要时是无关紧要的。init(coder aDecoder: NSCoder)
在您从情节提要中实例化视图控制器时调用,您只需将值传递给它即可。
您可以为新创建的视图控制器的属性设置一个值。 例如。
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let viewControllerd = storyboard.instantiateViewControllerWithIdentifier("a") as? SecondViewController
viewControllerd.a = "helo"
addViewControllerAsChildViewController(viewControllerd!)
【讨论】:
先生,我们可以不通过 init 传递值,就像我们在 xib 中所做的那样 @Rishab 我不明白你的评论。您不能将代码中的参数传递给从情节提要实例化的视图控制器。 再一次,您可以通过为某个属性设置值来传递参数。以上是关于在 StoryBoard 中传递价值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 didSelectRowAtIndexPath(在 Swift 中)在两个 Storyboard 之间传递日期?