我使用xCode创建了一个Master / Detail应用程序,并且对它的改动很少。在MasterViewController中的prepareForSegue中,我添加了这个以尝试将一些文本放在详细视图控制器的标签中
MMDetailViewController *detailVC = [segue destinationViewController];
detailVC.testdetail.text = @"test";
我还在故事板上的detailViewController中添加了一个标签,然后控制/拖动到detailViewController以连接它们。
@property (strong, nonatomic) IBOutlet UILabel *testdetail;
因此,当我在prepareForSegue
中设置文本时,我希望它在模拟器上运行代码后显示在标签中。但是,它并没有显示出来。你能解释一下原因吗?
答案 0 :(得分:1)
因为你无法在加载之前更新UILabel ... 所以你需要做的是:
创建Nsstring并更新它的值,然后在viewDidLoad中更新你的标签。
在你的detailViewController.h中添加
@property (strong, nonatomic)NSString *testString;
然后在viewDidLoad中的detailViewController.m中:
- (void)viewDidLoad
{
[super viewDidLoad];
self.testdetail.text = testString;
}
你的masterViewController中的:
MMDetailViewController *detailVC = [segue destinationViewController];
detailVC.testString = @"test";
那就是它,现在应该可以工作了:) 快乐的编码
答案 1 :(得分:0)
在-viewDidLoad
被解雇后,可以访问这些出口。这在-prepareForSegue:
中还没有发生,所以你可能会访问一个零值的标签。
detailVC.testdetail
中的nil
不是-prepareForSegue:
。相反,使用NSString
属性来传递值。将值放入目标-viewDidLoad
的{{1}}标签中,因为它自己负责这样做。