我试图通过按下不同视图控制器2上的按钮来更新视图控制器1上的标签。我在视图控制器2中有这个IBAction:
- (IBAction)done:(id)sender {
DropPinVC * vc = [[DropPinVC alloc]init];
NSString *updatedLabel = [[NSUserDefaults standardUserDefaults] stringForKey:@"Type Location"];
NSLog(@"Updated Label = %@", updatedLabel);
vc.TypeLabel.text = updatedLabel;
[self closeScreen];
}
但是,视图控制器1上的标签不会更新。有人知道这个问题的解决方案吗?
答案 0 :(得分:2)
vc 是在发布的操作范围内声明的 DropPinVC 类的新实例,并且与您要更新的实例不同。
实现此目的的一种方法是保持指向第一个视图控制器的指针。
为了让 viewController2(vc2)更新 viewController1(vc1)所拥有的 UILabel , vc2 需要引用 vc1 ,以便它可以访问标签。
将属性添加到 DropPinVC
类型的 vc2@property (nonatomic, strong) DropPinVC *vc1Ref;
假设 vc1 分配并初始化 vc2 ,那么在此之后,请指定 vc1Ref 属性。
vc2.vc1Ref = self;
现在,在IBAction中,您的代码现在可以访问正确的实例并更新正确的标签。
- (IBAction)done:(id)sender {
NSString *updatedLabel = [[NSUserDefaults standardUserDefaults] stringForKey:@"Type Location"];
NSLog(@"Updated Label = %@", updatedLabel);
self.vc1Ref.TypeLabel.text = updatedLabel;
[self closeScreen];
}