【问题标题】:Two actions for one UIBarButtonItem?一个 UIBarButtonItem 的两个动作?
【发布时间】:2013-02-24 03:48:25
【问题描述】:

我有一个edit button,是通过self.editButtonItem获得的,我设置为self.navigationItem.leftBarButtonItem,这样当按下它时,UITableView开始编辑,变成"Done" button。再次按下时,视图停止编辑,按钮返回正常状态。 我还希望"add" button 变成"Clear" button,并在按下编辑按钮时链接到不同的操作。 (很像iPhone"Phone" app's favourites tab,,只是当按下编辑按钮时加号按钮变成清除按钮)。

我真的很想以这种方式(self.editButtonItem)获取edit action 和样式等,但我还希望有一个额外的选择器链接到edit button

我应该怎么做?我尝试为UIBarButtonItem 创建一个类别,但我真的不知道该怎么做。

谢谢。

【问题讨论】:

    标签: ios objective-c selector uibarbuttonitem


    【解决方案1】:

    要创建标题可以更改的按钮,您可以执行以下操作:

    为按钮定义一个 ivar:

    UIBarButtonItem *_btnAddClear;
    

    viewDidLoad:

    _btnAddClear = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStyleBordered target:self action:@selector(addClearAction:)];
    _btnAddClear.possibleTitles = [NSSet setWithObjects:@"Add", @"Clear", nil];
    

    由于您希望在点击“编辑/完成”按钮时更改此按钮的标题,您可以添加如下代码:

    - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
        [super setEditing:editing animated:animated];
    
        _btnAddClear.title = editing ? @"Clear" : @"All";
    }
    

    最后是按钮处理程序:

    - (void)addClearAction:(UIBarButtonItem *)button {
        if (self.editing) {
            // perform "clear" action
        } else {
            // perform "add" action
        }
    }
    

    【讨论】:

      【解决方案2】:

      给出UIBarButton的标签比如101;

      并在 BarButton 方法中写如下

      -(void)barButtonMethod
      {
          UIBarButtonItem * myButton = (UIBarButtonItem *) sender;
      
          if(sender.tag == 101)
          {
               yourBtn.tag = 102;
      
               // Write Your first action method such like
      
               [self ActionMethod1];
          }
          else
          {
               yourBtn.tag = 101; 
      
              // Write Your second action method such like
      
               [self ActionMethod2]; 
           }
      }
      

      【讨论】:

        【解决方案3】:

        您实际上并不需要为 editButtonItem 设置新操作。

        有一个属性可以跟踪 UIViewController 是否处于编辑状态。

        @property(nonatomic, getter=isEditing) BOOL editing
        

        为了做你想做的事,你可以在你的 UITableViewController 中实现以下方法:

        - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
            [super setEditing:editing animated:animated]        
            //Do your thing
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 2016-12-07
          • 2012-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多