提问人:tombuarts 提问时间:6/17/2011 更新时间:6/17/2011 访问量:187
如何从不同的视图向按钮发送消息?
How do you send a message to a button from different views?
问:
我有一个应用程序,它有一个充当视图控制器的主视图。此主视图上有 3 个按钮。我有 3 个子视图,我在这个主视图中交换和退出,由 3 个按钮控制。每个子视图上都有一个按钮。按下此按钮时,我希望它禁用主视图上的 3 个按钮,直到再次按下该按钮。有没有办法在视图之间发送消息以禁用按钮?
答:
0赞
Legolas
6/17/2011
#1
使用 NSNotifications 发布按钮被按下的通知。
[[NSNotificationCenter defaultCenter] postNotificationName:@"Button1Pressed" object:self userInfo:info];
然后添加观察者,以便他们收听这些通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(buttonPress:) name:@"Button1Pressed" object:nil];
现在实现buttonPress
阅读 这里 获取 NSNotification 手册并学习使用它。
评论
0赞
tombuarts
6/18/2011
好的,我试图理解这一点。请耐心等待,我对目标 C 相当陌生。在我的主视图中,在 viewDidLoad 中,我放置了观察者(如上所示)和 removeObserver。在 3 个子视图之一中,我将 postNotification 放在 buttonPress 方法中。我没有收到任何警告或错误,但是当我按下按钮时,没有任何反应。有什么想法吗?
1赞
tombuarts
6/18/2011
好的,我弄清楚了我的错误。我在错误的位置删除了观察者。我把它移到了(void)dealloc,效果很好。非常感谢您的帮助。
1赞
Deepak Danduprolu
6/17/2011
#2
这对我来说听起来像是一个开关。更像是一个设置。如果你仔细想想,这应该进去.当你的那个特定观点出现时,可能在或,这样做,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:
NO
YES
0赞
fzwo
6/17/2011
#3
将主视图/控制器设置为内部视图的委托,定义一个协议,在其中定义一个方法,例如,让 VC 符合该协议并实现消息。在按钮上,.toggleMainButtons
addTarget:self.delegate action:@selector(toggleMainButtons) forControlEvents:UIControlEventTouchUpInside
评论