Segue 不能通过使用 Outlet 属性从一个控制器传递到另一个控制器?

Posted

技术标签:

【中文标题】Segue 不能通过使用 Outlet 属性从一个控制器传递到另一个控制器?【英文标题】:Segue cannot be passed from 1 controller to another by using Outlet property? 【发布时间】:2014-05-25 12:48:10 【问题描述】:

我有两个控制器 A 和 B

在 B 中,我有一个 UISwitch IBOutlet。

当我使用 A 中的 Segue 时,

switch.on = YES 不起作用。

如果我在 B 中声明另一个属性,比如 switchvalue,

@property (strong, nonatomic) NSNumber* switchvalue;

我可以将值传递给 switchvalue。

有人知道吗?不能直接在控件上设置属性很繁琐。

【问题讨论】:

IBOutlets 没有及时设置 segue。所以如果你想传递一些信息,你需要使用一个临时属性,然后在 viewDidLoad 或 viewWillAppear 方法中设置出口。 ***.com/a/23403979/294884 【参考方案1】:

无法在prepareForSegue: 中设置IBOutlet 的值,因为调用此方法时尚未创建出口。如果你调试你的代码,你会看到调用prepareForSegue时UISwitch的值是nil。

作为设置 NSNumber 属性的替代方法,您可以尝试this

【讨论】:

我添加了普通属性;当我调试时,我还看到普通属性也为零;但该值被传递给该普通属性。 字符串为 nil,因为它没有值。您可以设置一个值。在 IBOutlet 的情况下,您不是试图为插座设置一个值,而是为它的一个属性设置一个值。例如,您可以执行 controller.string = @"a" 但不能执行 controller.label.text = @"a" 因为 label 为 nil。因此无法更改文本属性。这就是区别

以上是关于Segue 不能通过使用 Outlet 属性从一个控制器传递到另一个控制器?的主要内容,如果未能解决你的问题,请参考以下文章

无法将 OUTLET 从 Storyboard 导入到 ViewController

通过 segue 传递数据不能在 swift 3 中运行任何解决方案?

Angular 之 named outlet

不能在代码中调用 segue (Swift)

Angular 4:未执行 <router-outlet> 中的自定义属性指令

手动使用 Segue