【问题标题】:Multiple UIButtons 1 function多个 UIButtons 1 功能
【发布时间】:2011-02-23 22:50:02
【问题描述】:

基本上我需要在一个视图中有几个按钮。我希望他们都调用一个函数,以便我可以跟踪“状态”。

如何判断是哪个按钮调用了该函数?有没有办法获取发件人的文字?

【问题讨论】:

    标签: iphone objective-c uibutton ibaction iboutlet


    【解决方案1】:

    在 iOS 操作方法中,包括 IBAction 方法,可以具有以下任何签名(请参阅“Target-Action in UIKit”):

    - (void)action
    - (void)action:(id)sender
    - (void)action:(id)sender forEvent:(UIEvent *)event
    

    如果您使用接受发送者的方法签名,那么您可以访问触发该操作的对象。然后,您可以访问调用对象的属性,包括其标题和标签。您还可以将发送者与您可能已经拥有的按钮指针进行比较,以确定哪个按钮是此特定事件的发送者。

    我喜欢比较指针,因为我相信if (sender == self.nextPageButton)if (sender.tag == 4)if ([((UIButton *)sender).currentTitle isEqualToString:@"foo"]) 更容易理解并且不太可能中断。查看 IB 中的标签不会告诉您代码假设它们的含义以及它们是否重要。标题会随着您更新 UI 或本地化应用程序而改变,这些更改也不需要更改代码。

    【讨论】:

      【解决方案2】:

      设置按钮的tag属性。

      您可以在 Interface Builder 中执行此操作(只需查看字段)。

      然后在代码中:

      if (sender.tag == 0) {
      } else if (sender.tag == 1)
      

      等等

      【讨论】:

        【解决方案3】:

        您无需明确设置标签。您可以在 .h 文件中定义 UIButton 的 IBOutlets 及其属性以及

        @property (nonatomic , retain) IBOutlet UIButton *myButton;
        

        方法为

        -(IBAction) browse : (id) sender; 
        

        在 .m 文件中,您可以将方法实现为

        -(IBAction) browse : (id) sender{
        
            if((UIButton *)sender == myButton){/*add the action here*/}
         } 
        

        在方法中为您希望的多个按钮添加更多 if 语句。请连接所有相应按钮的 IBOutlets 以及选择器浏览。

        请记住在 dealloc 方法中释放 IBOutlets 以防止任何内存泄漏。

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2013-03-02
          • 1970-01-01
          • 1970-01-01
          • 2020-09-25
          • 2016-09-07
          • 1970-01-01
          • 2020-04-03
          • 1970-01-01
          • 2021-09-24
          相关资源
          最近更新 更多