2012-03-06 39 views
11

我有一个简单的故事板由两个UIViewControllers组成,用segue连接它们。如何在继续之后设置UILabel的值?

UIVC1 - > UIVC2

我想设置一个UILabel上UIVC2等于存储在UIVC1的字符串。我试图在prepareForSegue方法中传递字符串,并且迄今为止我已将它设置为UIVC2中的property

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"mySegue"]) { 
     [segue.destinationViewController setDesc:[Brain description]]; 
    } 
} 

在UIVC2该物业是desc.

然后,在我的setDesc方法,我已经实现了,我跑self.display.text = self.desc其中display是我的财产的UILabel。

但是,这是行不通的,甚至当我只是NSLog的UILabel的价值,它不会打印任何东西,这让我怀疑控制器是否甚至与UILabel通信...(我做了ctr +在故事板中点击并拖动东西以将它们连接起来。)

有没有更好的方法来做到这一点?

回答

27

您的UILabel文本没有被设置,因为prepareForSegue在IBOutlet被调用之前已经连接了目标视图控制器上的标签。所以在这一点上的标签依然nil(和发送消息到nil没有任何影响。)

你应该做的,而不是对你的目标视图控制器上创建一个新的属性来存储字符串,并设置该属性在prepareForSegue。然后在您的目标视图控制器的viewDidLoad方法中,使用该属性的值来设置UILabel的text属性。

+0

我发现同样的问题,我发现confussing是我可以设置文本到一个outleted按钮与[destController.button setTitle:@“Title”forState:UIControlStateNormal]但标签不起作用。有什么不同? – Marcal 2012-05-10 11:34:54

+0

我会检查以确保您的标签在您尝试设置其文本时不是'nil'。 – jonkroll 2012-05-10 13:34:27