一个UIBarButtonItem的两个动作?

时间:2013-02-23 14:38:18

标签: ios objective-c selector uibarbuttonitem

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

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

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

感谢。

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

提供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]; 
     }
}

答案 2 :(得分:0)

您不需要为editButtonItem创建新操作。

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

@property(nonatomic, getter=isEditing) BOOL editing

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

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