如何将消息发送到不同视图的按钮?

问题描述:

我有一个应用程序,它具有充当视图控制器的主视图。这个主视图上有3个按钮。我有3个子视图,我可以通过3个按钮控制这个主视图。每个子视图都有一个按钮。当按下此按钮时,我希望它禁用主视图上的3个按钮,直到再次按下该按钮。有没有办法在视图之间发送消息来禁用按钮?如何将消息发送到不同视图的按钮?

使用NSNotifications发布按钮被按下的通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"Button1Pressed" object:self userInfo:info]; 

然后添加观察者,以便他们监听这些通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(buttonPress:) name:@"Button1Pressed" object:nil]; 

现在实行buttonPress

阅读HERE的NSNotification手动和学会使用它。

+0

好的,我试图理解这一点。请耐心等待,我对Objective C相当陌生。在我的主视图中,在viewDidLoad中,我放置了观察者(如上所示)和removeObserver。在3个子视图中的一个中,我将postNotification放置在buttonPress方法中。我没有收到任何警告或错误,但是当我按下按钮时什么都没有发生。有任何想法吗? – tombuarts 2011-06-17 23:41:33

+1

好的,我想出了我的错误。我在错误的地方删除了Observer。我把它移到(void)dealloc中,它很好用。非常感谢您的帮助。 – tombuarts 2011-06-18 00:30:16

这听起来像是切换到我。更像一个设置。如果你想一想,这应该在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,如果您希望在启动时启用控件。

将主视图/控制器设置为内部视图的代表,定义一个协议,在该协议中定义一个方法,例如toggleMainButtons,使VC符合该协议并实现该消息。在按钮上,addTarget:self.delegate action:@selector(toggleMainButtons) forControlEvents:UIControlEventTouchUpInside