【发布时间】:2019-04-28 13:21:26
【问题描述】:
我是致力于目标 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 是以编程方式创建的。
我在这里一无所知。任何形式的帮助表示赞赏。 谢谢。
【问题讨论】:
-
你用的是笔尖还是故事板?
-
@HichemRomdhane 嘿,故事板。但是所有其他元素,如 UIButton 和 UISwitch 都是以编程方式创建的。
标签: ios objective-c delegates protocols ios-lifecycle