如何从不同的视图向按钮发送消息?

How do you send a message to a button from different views?

提问人:tombuarts 提问时间:6/17/2011 更新时间:6/17/2011 访问量:187

问:

我有一个应用程序,它有一个充当视图控制器的主视图。此主视图上有 3 个按钮。我有 3 个子视图,我在这个主视图中交换和退出,由 3 个按钮控制。每个子视图上都有一个按钮。按下此按钮时,我希望它禁用主视图上的 3 个按钮,直到再次按下该按钮。有没有办法在视图之间发送消息以禁用按钮?

目标-C

评论


答:

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

这对我来说听起来像是一个开关。更像是一个设置。如果你仔细想想,这应该进去.当你的那个特定观点出现时,可能在或,这样做,NSUserDefaultsviewWillAppear: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:NOYES

0赞 fzwo 6/17/2011 #3

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