Как изменить тип UIBarButtonItem в UINaviagationBar во время выполнения? - PullRequest
7 голосов
/ 30 октября 2009

Я работаю над представлением iPhone, которое состоит из 3 элементов: UITextView, UIToolBar с UIBarButtonItem.

Цель состоит в том, чтобы я хотел, чтобы UIBarButtonItem изменил свой стиль с 'edit' (UIBarButtonSystemItemEdit) на 'Done' (UIBarButtonSystemItemDone) и обновил новый селектор на новый метод.

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

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

Ответы [ 4 ]

14 голосов
/ 30 октября 2009

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

- (void)viewDidLoad {
  [super viewDidLoad];
  self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
5 голосов
/ 10 февраля 2011

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

Затем в вашем коде сделайте следующее:

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

// Set back to edit
editButton.style = UIBarButtonItemStyleBordered;
editButton.title = @"Edit";
4 голосов
/ 03 сентября 2010

, чтобы изменить кнопку Готово, используйте эту кнопку

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];

чтобы изменить кнопку на кнопку Редактировать, используйте

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleBordered];
2 голосов
/ 06 апреля 2012

Я закончил тем, что делал что-то подобное. К сожалению, установка заголовка напрямую не работала, по какой-то причине она была нулевой и не позволяла мне установить другое значение. 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;
...