iOS - 无法使用 prepareforsegue 设置容器视图内容
iOS - Can't set the container view content using prepareforsegue
我有一个 UIViewController ,有三个容器视图 link 相同的嵌入 UIViewController(ContainerViewController).
然后segue标识符为"segue1","segue2","segue3".
我在 prepareForSegue 中设置了值,但是容器视图中的 UILabel(currentLB) 没有改变。
我把代码设置在UIViewController.m
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"segue.identifier:%@",segue.identifier);
if ([segue.identifier isEqualToString:@"segue1"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.currentLB.text = @"123";
}
if ([segue.identifier isEqualToString:@"segue2"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.currentLB.text = @"234";
}
if ([segue.identifier isEqualToString:@"segue3"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.currentLB.text = @"345";
}
}
有谁知道为什么吗?
我知道还有其他方法可以使用
((ContainerViewController*)self.childViewControllers[1]).currentLB.text = @"2222";
可以设置容器值。
但我现在想使用 prepareforsegue 设置值。
有谁知道哪里错了吗?
非常感谢。
----答案----
在UIViewContainer.h中设置NSString 属性.
@property (nonatomic,strong) NSString *containerLBValue;
在UIViewContainer.m
-(无效)viewDidLoad
{
[超级viewDidLoad];
self.currentLB.text = self.containerLBValue;
}
更改 prepareForSegue 代码:
if ([segue.identifier isEqualToString:@"segue1"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.containerLBValue = @"123";
}
不能在prepareForSegue中设置IBOutlet的文本,因为视图还没有加载,outlets将为nil。您需要在目标控制器中有一个字符串 属性,并将该字符串传递给它。然后目标控制器应该使用传入的字符串在 viewDidLoad 中设置自己的标签。
我有一个 UIViewController ,有三个容器视图 link 相同的嵌入 UIViewController(ContainerViewController).
然后segue标识符为"segue1","segue2","segue3".
我在 prepareForSegue 中设置了值,但是容器视图中的 UILabel(currentLB) 没有改变。
我把代码设置在UIViewController.m
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"segue.identifier:%@",segue.identifier);
if ([segue.identifier isEqualToString:@"segue1"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.currentLB.text = @"123";
}
if ([segue.identifier isEqualToString:@"segue2"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.currentLB.text = @"234";
}
if ([segue.identifier isEqualToString:@"segue3"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.currentLB.text = @"345";
}
}
有谁知道为什么吗?
我知道还有其他方法可以使用
((ContainerViewController*)self.childViewControllers[1]).currentLB.text = @"2222";
可以设置容器值。
但我现在想使用 prepareforsegue 设置值。
有谁知道哪里错了吗?
非常感谢。
----答案----
在UIViewContainer.h中设置NSString 属性.
@property (nonatomic,strong) NSString *containerLBValue;
在UIViewContainer.m -(无效)viewDidLoad { [超级viewDidLoad];
self.currentLB.text = self.containerLBValue;
}
更改 prepareForSegue 代码:
if ([segue.identifier isEqualToString:@"segue1"]) {
ContainerViewController *viewController = (ContainerViewController*)[segue destinationViewController];
viewController.containerLBValue = @"123";
}
不能在prepareForSegue中设置IBOutlet的文本,因为视图还没有加载,outlets将为nil。您需要在目标控制器中有一个字符串 属性,并将该字符串传递给它。然后目标控制器应该使用传入的字符串在 viewDidLoad 中设置自己的标签。