我在将值传递给destinationViewController的IBOutlet属性时遇到问题,但它在普通属性上工作正常,请参阅下面的代码
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"NewsCellToDetail"]) {
testViewController *viewController = segue.destinationViewController;
viewController.titleLabel.text = @"test"; // set the IBOutlet label text to something
NSLog(@"%@",viewController.titleLabel.text); // this will output to nil
viewController.textTest = @"testing2"; // set the property to something
NSLog(@"%@", viewController.textTest) // this will output the string testing2
}
这是头文件testviewcontroller.h的代码
#import <UIKit/UIKit.h>
@interface NewsDetailViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@property (strong, nonatomic) NSString *textTest;
@end
我已经综合了这两个属性。
谢谢您的帮助。
我回答这个问题有点晚了,但我最近遇到了这个问题,如果我们仍然手动实例化事物而不是让故事板处理它,那么原因就很明显了。这恰好和你是同样的原因never手动实例化视图控制器时操作视图:segue 的destinationViewController 尚未调用loadView:,它在故事板中通过反序列化关联笔尖中的所有视图对象来运行。
一个非常简单的方法来查看它的实际效果:
- 创建两个 ViewController 场景(ViewController1 和 ViewController2)
- 将一个按钮添加到 ViewController 1 并将一个操作从该按钮添加到 ViewController 2
- 将子视图添加到 ViewControler2,并将 IBOutlet 添加到该子视图
- 在ViewController1的prepareForSegue:中,尝试引用ViewController2的子视图出口——你会发现它是nil并且它的frame/bounds是null。
这是因为ViewController2的视图还没有被添加到视图堆栈中,但是控制器已经被初始化了。因此,你应该never尝试在prepareForSegue中操作ViewController 2的视图:否则你所做的任何事情都会丢失。请参考 Apple 的 ViewController 编程指南,了解生命周期:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html
这里接受的答案是通过访问目标的 .view 属性来强制 loadView 在prepareForSegue中运行,这就是事情显示不按顺序的原因,并且will如果您尝试在 viewDidLoad 中执行任何类型的视图操作来解释任何数据加载,则会有未知/难以重现结果,因为如果没有将视图加载到 viewStack,则对框架引用的父视图的任何引用都将为零。
TL;博士; -
如果您需要像 OP 的情况一样传递数据,请使用目标上的公共属性来设置它,然后在目标控制器的 viewDidLoad 中将该数据加载到视图的子视图中。
Edit:
类似的问题在这里 -IBOutlet 在自定义 UIView 中为零(使用 STORYBOARD) https://stackoverflow.com/questions/14089410/iboutlet-is-nil-inside-custom-uiview-using-storyboard
您可能还想利用 viewDidLayoutSubviews: 进行任何子视图操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)