2013-11-22 2 views
5

У меня есть представление таблицы в приложении, которое показывает некоторые элементы. когда я нажимаю на один элемент, появляется новый вид таблицы (с контроллером навигации: push). Таким образом, в верхней части таблицы видят теперь навигационный контроллер с автоматической стрелкой «назад», чтобы вернуться. У меня есть кнопка «edit», включенная с правой стороны.iPhone - добавьте кнопку «Добавить», когда кнопка «Редактировать» выбрана в UITableView

Теперь, когда я нажимаю на кнопку редактирования, кнопка «Назад» должна исчезнуть, и вместо кнопки «Назад» должна появиться кнопка «+». Это возможно? Или можно одновременно нажать кнопку «Редактировать» и «Добавить» на экране?

спасибо

ответ

7

Это достаточно легко. Переопределите метод setEditing:animated: вашего контроллера. Это вызывается при переключении кнопки Edit/Done (при условии, что вы используете стандарт editButtonItem от UIViewController).

В этом методе вы создаете кнопку «Добавить» и делаете ее левой кнопкой мыши. Это скроет кнопку «Назад». Удалите кнопку «Добавить», и снова появится кнопка «Назад».

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    if (editing) { 
     // Add the + button 
     UIBarButtonItem *addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction:)]; 
     self.navigationItem.leftBarButtonItem = addBtn; 
    } else { 
     // remove the + button 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
} 
+0

работает нормально! Спасибо! –

0

Кнопка со стрелкой назад - это кнопка управления навигатором. Так что если вы хотите, чтобы исчезнуть на ту же кнопку, то вы должны написать этот код ниже: -

self.navigationItem.hidesBackButton=YES; 

Теперь, если вы хотите добавить пользовательскую кнопку на навигационном контроллере используйте код ниже: -

UIBarButtonItem *customButton = 
[[UIBarButtonItem alloc] 
          initWithTitle:@"Add"            

    style:UIBarButtonItemStyleBordered 
          target:self 
          action:@selector(yourMethod:)]; 
self.navigationItem.rightBarButtonItem = customButton; 
0

Вы можете программно скрыть кнопку назад, когда ваш вид таблицы начинается редактирование, а затем добавить кнопку «Добавить» в левой части панели навигации.

[self.navigationItem setHidesBackButton:YES]; 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonPressed)]; 
[self.navigationItem setLeftBarButtonItem:addButton]; 

Затем, когда пользователь нажимает Готово, заменить кнопку «Добавить» с помощью кнопки Назад:

[self.navigationItem setHidesBackButton:NO]; 

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem; 
+0

Как я могу создать метод действия для кнопки редактирования? –

+0

Не сбрасывайте 'leftBarButtonItem' с помощью' backBarButtonItem'. Просто установите 'leftBarButtonItem' в' nil'. И нет необходимости скрывать кнопку «Назад». – rmaddy

+0

@ user2710855 Он встроен. См. Мой ответ. – rmaddy

2

Да, это тот подход, который я использовал:

Иметь недвижимость как для кнопки возврата и кнопки добавления и установите его в viewDidLoad:

self.backButton = self.navigationItem.leftBarButtonItem; 
self.addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPressed:)]; 

Теперь вы просто должны Sw ap кнопками и обновить состояние TableView соответственно при нажатии «Edit». Здесь также меняю кнопку «Редактировать» на «Готово»:

- (IBAction)editBarButtonPressed:(UIBarButtonItem *)sender { 
    if (self.tableView.editing == NO) { 
     UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(editBarButtonPressed:)]; 

     self.navigationItem.rightBarButtonItem = myButton; 
     [self.tableView setEditing:YES animated:YES]; 

     [self.navigationItem setLeftBarButtonItem:self.addButton animated:YES]; 
    } else { 
     UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editBarButtonPressed:)]; 

     self.navigationItem.rightBarButtonItem = myButton; 
     [self.tableView setEditing:NO animated:YES]; 

     [self.navigationItem setLeftBarButtonItem:self.backButton animated:NO]; 
    } 
} 

Надеюсь, что это ответит на ваш вопрос. :) br denrase

+1

Вы делаете это с трудом. Используйте стандартную кнопку «РедактироватьButtonItem» UIViewController для кнопки «Редактировать/Готово» и стандартный метод «setEditing: анимированный:». – rmaddy

+0

Вы правы, это проще. :) – denrase

+0

Согласен с @rmaddy; Я не уверен, почему вы хотите сделать более сложный шаг. – Blaszard

Смежные вопросы