prepareForSegue 没有设置 UILabel
prepareForSegue not setting UILabel
我有一个 prepareForSegue
方法设置,它将我想要的所有内容发送到 destinationViewController
,除了 destinationVC
上的 UILabel
的值。我扔了一个 NSLog 语句来查看它打印了什么值,它打印了我想要的。
它没有崩溃,但没有设置。我知道我在这里遗漏了一些非常基本的东西,但它并没有跳出来。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender {
if ([[segue identifier] isEqualToString:@"directionsSegue"]) {
// Set destination view controller
DirectionsViewController *destinationVC = segue.destinationViewController;
// Pick out the "thing" you want to send to destinationVC
CGPoint point = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
// Set the "thing" on the destinationVC
PointOfInterest *poi = [self.fetchedResultsController objectAtIndexPath:indexPath];
destinationVC.destinationLabel.text = poi.name;
NSLog(@"destinationVC.destinationLabel.text = %@", poi.name);
destinationVC.destinationLatitude = poi.latitude;
destinationVC.destinationLongitude = poi.longitude;
}
}
我的 属性 在我的目标 VC 的 header 中声明:
@property (strong, nonatomic) IBOutlet UILabel *destinationLabel;
来自以下答案的解决方案:
谜底揭晓!这是我所做的:
在我的 destinationVC 上,我将其添加到我的 header:
@property (nonatomic, strong) NSString *destinationName;
我把这个放回实现中:
@property (strong, nonatomic) IBOutlet UILabel *destinationLabel;
在 destinationVC
中,我将此添加到我的 viewDidLoad
:
self.destinationLabel.text = self.destinationName;
您的标签在 prepareForSegue
中将为 nil,因为此时它不会被实例化。事实上,一旦您的视图被加载,IBOutlet 就会被初始化。这就是它不起作用的原因。
解决您的问题的最佳方法是在您的 DirectionsViewController
中创建另一个 属性 来存储您的文本。这个在你的控制器初始化后就可以直接使用,然后你可以在你的控制器的任何地方直接设置你的标签。
IBOutlet 对象在加载视图控制器的视图之前不会被初始化。那发生在 segue 之后。创建自定义 属性 并在准备期间更新它,然后在 viewDidLoad
期间将其复制到您的标签。
我有一个 prepareForSegue
方法设置,它将我想要的所有内容发送到 destinationViewController
,除了 destinationVC
上的 UILabel
的值。我扔了一个 NSLog 语句来查看它打印了什么值,它打印了我想要的。
它没有崩溃,但没有设置。我知道我在这里遗漏了一些非常基本的东西,但它并没有跳出来。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender {
if ([[segue identifier] isEqualToString:@"directionsSegue"]) {
// Set destination view controller
DirectionsViewController *destinationVC = segue.destinationViewController;
// Pick out the "thing" you want to send to destinationVC
CGPoint point = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
// Set the "thing" on the destinationVC
PointOfInterest *poi = [self.fetchedResultsController objectAtIndexPath:indexPath];
destinationVC.destinationLabel.text = poi.name;
NSLog(@"destinationVC.destinationLabel.text = %@", poi.name);
destinationVC.destinationLatitude = poi.latitude;
destinationVC.destinationLongitude = poi.longitude;
}
}
我的 属性 在我的目标 VC 的 header 中声明:
@property (strong, nonatomic) IBOutlet UILabel *destinationLabel;
来自以下答案的解决方案:
谜底揭晓!这是我所做的:
在我的 destinationVC 上,我将其添加到我的 header:
@property (nonatomic, strong) NSString *destinationName;
我把这个放回实现中:
@property (strong, nonatomic) IBOutlet UILabel *destinationLabel;
在 destinationVC
中,我将此添加到我的 viewDidLoad
:
self.destinationLabel.text = self.destinationName;
您的标签在 prepareForSegue
中将为 nil,因为此时它不会被实例化。事实上,一旦您的视图被加载,IBOutlet 就会被初始化。这就是它不起作用的原因。
解决您的问题的最佳方法是在您的 DirectionsViewController
中创建另一个 属性 来存储您的文本。这个在你的控制器初始化后就可以直接使用,然后你可以在你的控制器的任何地方直接设置你的标签。
IBOutlet 对象在加载视图控制器的视图之前不会被初始化。那发生在 segue 之后。创建自定义 属性 并在准备期间更新它,然后在 viewDidLoad
期间将其复制到您的标签。