【发布时间】:2011-06-17 00:12:33
【问题描述】:
我有一个应用程序,它有一个作为视图控制器的主视图。这个主视图上有 3 个按钮。我有 3 个子视图,我可以在这个主视图中交换进出,由 3 个按钮控制。每个子视图上都有一个按钮。按下此按钮时,我希望它禁用主视图上的 3 个按钮,直到再次按下该按钮。有没有办法在视图之间发送消息以禁用按钮?
【问题讨论】:
标签: objective-c
我有一个应用程序,它有一个作为视图控制器的主视图。这个主视图上有 3 个按钮。我有 3 个子视图,我可以在这个主视图中交换进出,由 3 个按钮控制。每个子视图上都有一个按钮。按下此按钮时,我希望它禁用主视图上的 3 个按钮,直到再次按下该按钮。有没有办法在视图之间发送消息以禁用按钮?
【问题讨论】:
标签: objective-c
这对我来说听起来像是一个切换。更像是一个设置。如果您考虑一下,这应该进入NSUserDefaults。当您出现特定视图时,可能在viewWillAppear: 或viewDidAppear: 中,执行此操作,
BOOL controlsEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"ControlsEnabledKey"];
button1.enabled = controlsEnabled;
button2.enabled = controlsEnabled;
button3.enabled = controlsEnabled;
要保存该按钮按下时的值,
BOOL controlsEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"ControlsEnabledKey"];
[[NSUserDefaults standardUserDefaults] setBool:!controlsEnabled forKey:@"ControlsEnabledKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
注意由于boolForKey:如果没有找到key会返回NO,如果你想启用控件,我建议你在应用程序启动时将值设置为YES在发布时。
【讨论】:
使用 NSNotifications 发布按钮被按下的通知。
[[NSNotificationCenter defaultCenter] postNotificationName:@"Button1Pressed" object:self userInfo:info];
然后添加观察者,以便他们收听这些通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(buttonPress:) name:@"Button1Pressed" object:nil];
现在实现buttonPress
阅读HERE 获取 NSNotification 手册并学习使用它。
【讨论】:
将主视图/控制器设置为内部视图的委托,定义一个协议,您可以在其中定义一个方法,例如toggleMainButtons,让 VC 符合该协议并实现消息。在按钮上,addTarget:self.delegate action:@selector(toggleMainButtons) forControlEvents:UIControlEventTouchUpInside。
【讨论】: