iOS >> prepareForSegue >> IBOutlet 更新不起作用?

标签 ios properties uiviewcontroller uistoryboardsegue iboutlet

我正在尝试在 prepareForSegue 方法中从第一个 VC 更新第二个 VC 中的标签。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    MYSecondViewController* secondVC = (MYSecondViewController*)segue.destinationViewController;
    secondVC.titleLabel.text = @"First VC Says: You Are Second!!"; //This doesn't work
    secondVC.dataPassString = @"First VC Says: You Are Second!!"; //This works + secondVC viewDidLoad
}

如果我直接更新标签,它不起作用。 如果我更新一个字符串属性,然后将它分配给第二个 VC viewDidLoad 中的标签,它确实有效。

这是否意味着在调用 prepareForSegue 时,第二个 VC viewDidLoad 方法尚未调用?

是否调用了一些初始化方法(因此 NSString 对象可以通过)?如果有,是哪一个?

有没有办法从第一个 VC 更新第二个 VC 中的 IBOutlets?

最佳答案

简短的回答是:不要那样做。

您应该将另一个 View Controller 的 View 视为私有(private) View ,并且永远不要尝试操纵它们。它打破了 OOD 的封装原则。

您要做的是向目标 View Controller 添加(字符串或其他类型)属性,并在 prepareForSegue 中设置这些属性。然后在目标 View Controller 的 viewWillAppear 方法中,将这些属性值复制到 View Controller 的 View 中。

在您的情况下,datePassString 属性正是您想要的。

这样一来,如果您以后更改第二个 View Controller 的结构,并决定将信息显示到不同的 View ,则不会破坏这两个 View Controller 之间的链接。你的目标 View Controller 仍然可以从它的源获取数据,并用它做一些不同的事情。

附言正如另一位发帖人所说,设置 secondVC.titleLabel.text 失败的原因是在 prepareForSegue 中,目标 View Controller 的 View 尚未加载。

关于iOS >> prepareForSegue >> IBOutlet 更新不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744380/

相关文章:

cocoa-touch - 如何以编程方式设置 UILabel 的背景颜色?

java - 检测未使用的属性键的简单方法?

ios - 在 View 已经可见时更改 uitabbar 图标

ios - 手动推送的 View Controller 卡住应用程序

ios - UIPageControl 选择点并转到该页面

ios - 如何获取放置在 tableviewcell 中的图像的原点(在屏幕中)?

iOS gamekit/蓝牙数据流

ios - 创建自定义垂直 UISlider

属性中的 Java 按钮位置

ios - UITableViewCell 中令人费解的 UIImageView 行为