【问题标题】:How do you send a message to a button from different views?如何从不同的视图向按钮发送消息?
【发布时间】:2011-06-17 00:12:33
【问题描述】:

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

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    这对我来说听起来像是一个切换。更像是一个设置。如果您考虑一下,这应该进入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在发布时。

    【讨论】:

      【解决方案2】:

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

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

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

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

      现在实现buttonPress

      阅读HERE 获取 NSNotification 手册并学习使用它。

      【讨论】:

      • 好的,我正在努力理解这一点。请耐心等待,我对 Objective C 还很陌生。在我的主视图中,在 viewDidLoad 中,我放置了观察者(如上所示)和 removeObserver。在 3 个子视图之一中,我将 postNotification 放在 buttonPress 方法中。我没有收到任何警告或错误,但是当我按下按钮时没有任何反应。有什么想法吗?
      • 好的,我发现了我的错误。我将删除观察者放在错误的位置。我将它移到 (void)dealloc 并且效果很好。非常感谢您的帮助。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多