2013-02-23 2 views
0

У меня есть edit button, который я получил через self.editButtonItem, и я установил его как self.navigationItem.leftBarButtonItem, так что при нажатии он начинает редактирование UITableView и превращается в "Done" button. При повторном нажатии вид перестает редактироваться, и кнопка возвращается в нормальное состояние. Мне также хотелось бы, чтобы "add" button превратился в "Clear" button с другим действием, связанным с ним при нажатии кнопки редактирования. (Как и в случае iPhone"Phone" app's favourites tab,, кнопка «плюс» превращается в прозрачную кнопку при нажатии кнопки «Редактировать»).Два действия для одного UIBarButtonItem?

Я действительно хотел бы получить edit action и стиль и т.д. в этом случае (self.editButtonItem), но я также хотел бы иметь дополнительный селектор, связанный с edit button.

Как мне это сделать? Я попытался создать категорию для UIBarButtonItem, но я не знаю, что мне с этим делать.

Спасибо.

ответ

1

Чтобы создать кнопку, название которой можно изменить, вы можете сделать следующее:

Определить Ивар для кнопки:

UIBarButtonItem *_btnAddClear; 

В viewDidLoad :

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

Так как вы хотите название этой кнопки, чтобы изменить, когда кнопка Edit/Done сливают, вы можете добавить код, как в следующем:

- (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 
    } 
} 
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]; 
    } 
} 
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 
} 
Смежные вопросы