2009-10-30 5 views
7

Я работаю над представлением iPhone, который составил 3 элемента, UITextView, UIToolBar с UIBarButtonItem.Как изменить тип UIBarButtonItem в UINaviagationBar во время выполнения?

Целью является то, что UIBarButtonItem меняет свой стиль на «редактировать» (UIBarButtonSystemItemEdit) на «Готово» (UIBarButtonSystemItemDone) и обновляет новый селектор до нового метода.

Прежде всего, я попытался следующий код, но он не работает:

Не могли бы вы помочь мне на этой идее?

ответ

14

Существует встроенная кнопка с этим поведением, вы получаете ее через свойство UIViewContoller. Нажав эту кнопку, вы измените контроллер вида, из которого он перешел в режим редактирования, и переключите кнопку на кнопку «Готово».

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 
+0

большое спасибо! лучший ответ с реальным решением для всех подобных вопросов! – itinance

4

изменить кнопку кнопку Done использовать этот

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 

изменить кнопку для редактирования кнопки используйте этот

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleBordered]; 
5

Если вы добавили кнопку через IB, то убедитесь, для установки идентификатора на пользовательский Также выделите кнопку в .h с соответствующим IBOutlet и свойством Синтезируйте кнопку в .m

Тогда в вашем коде выполните следующие действия:

// Set to done 
editButton.style = UIBarButtonItemStyleDone; 
editButton.title = @"Done"; 

// Set back to edit 
editButton.style = UIBarButtonItemStyleBordered; 
editButton.title = @"Edit"; 
2

Я закончил тем, что делал что-то вроде этого. К сожалению, установка заголовка напрямую не работала, по какой-то причине она была нулевой и не позволяла мне устанавливать ее на другое значение. Self.editButton происходит от IBOutlet с целью и набором действий. Этот код использует ARC. Я надеюсь, что это помогает кому-то.

 NSString *title = app.settings.editing 
         ? NSLocalizedString(@"Done", @"") 
         : NSLocalizedString(@"Edit", @""); 

     UIBarButtonItemStyle style = app.settings.editing 
            ? UIBarButtonItemStyleDone 
            : UIBarButtonItemStyleBordered; 

     UIBarButtonItem *editButton 
      = [[UIBarButtonItem alloc] initWithTitle:title 
               style:style 
               target:self.editButton.target 
               action:self.editButton.action]; 

     self.navigationItem.rightBarButtonItem = editButton;