我是致力于目标 C 的新手。我面临一个问题。我有包含三个视图控制器的选项卡栏控制器,其中我只关心两个名为 "Setting" 和 "BBVC" 的 VC。“BBVC”有一个 UIButton,“Setting”有一个 UISwitch(请看下图)。
当按下按钮“B”时,在标签栏视图控制器中执行下面的代码:
- (void)centerButtonTapped:(id __unused)sender {
BBVC *vc = [[BBVC alloc] init];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentViewController:nc animated:YES completion:nil];
}
BBVC 被加载为弹出窗口
我的目标是我想根据“UIButton”动作事件改变“UISwitch”的值。
案例 1:未设置视图
在这种情况下,按下 UIButton 后,当我在“设置”VC 上时,可以使用 viewWillappear 和 UserDefault 来实现目标,如下所示:
- (void)viewWillAppear:(BOOL)animated
{
NSLog(@"viewWillAppear");
[super viewWillAppear:animated];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[Switch setOn:[defaults boolForKey:@"EnableLIVE"] animated:YES];
}
案例2:
在这种情况下,我已经在“设置”VC(即设置视图已加载)上,当按下选项卡栏中的按钮“B”时,它会作为弹出窗口加载,如下图所示。我正在努力实现我的目标,但它不起作用。
尝试 1:在设置 VC 中,我更新了“viewDidAppear”方法中的代码,但是在调试时我在关闭 BBVC 后才知道,方法“viewDidAppear”没有被调用。
-(void)viewDidDisappear:(BOOL)animated
{
NSLog(@"viewDidDisappear");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[Switch setOn:[defaults boolForKey:@"EnableLIVE"] animated:YES];
}
尝试 2:
使用委托和协议:
我使用了工作正常的委托和协议,但在这种情况下 UISwitch 的地址为零。请看下图
注意: UISwitch 是以编程方式创建的。
我在这里一无所知。任何形式的帮助表示赞赏。谢谢你。