Как изменить UIBarButtonItem в UINavigationBar - PullRequest
8 голосов
/ 03 апреля 2010

Я пытаюсь настроить список элементов, которые можно редактировать. У меня есть основной вид, с UINavigationBar вверху и UITableView прямо под ним. Я бы хотел, чтобы моя кнопка «Изменить» была заменена на кнопку «Готово», но я не могу понять, как это сделать.

Если бы я мог сделать это в коде (не в конструкторе интерфейсов), я мог бы просто заменить его, но я даже не могу этого сделать. Я видел некоторый код, использующий [self.navigationItem], но в моем случае self - это UIView.

Также немного странно использовать UINavigationBar, когда я не хочу навигации (это только одна страница), но я хочу панель инструментов с заголовком и кнопкой, так что я не думаю, что действительно выбор.

Ответы [ 5 ]

16 голосов
/ 03 апреля 2010

Я создаю одну кнопку, которая может измениться с Изменить на Готово. Это совет от More iPhone Development book.

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem *editButton = self.editButtonItem;  
    [editButton setTarget:self]; 
    [editButton setAction:@selector(toggleEdit)]; 
    self.navigationItem.leftBarButtonItem = editButton; 
}

и метод toggleEdit

- (IBAction)toggleEdit { 
    BOOL editing = !self.tableView.editing; 
    self.navigationItem.rightBarButtonItem.enabled = !editing; 
    if (editing) {
        self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done");
        //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone
        self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;
    } else {
        self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit"); 
        //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone
        self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStylePlain;
    }
    [self.tableView setEditing:editing animated:YES]; 
} 

Тогда вам не нужно заменять ни одного из них.

4 голосов
/ 12 мая 2010

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

2 голосов
/ 03 октября 2010

установите кнопку навигации в IB со следующим, связанным в IB, и создайте выход с именем editOutlet и и действие с именем editToggle в вашем заголовочном файле, и ваш метод так же прост, как этот:

-(IBAction) editToggle:(id) sender {

if (self.tableViewOutlet.isEditing == NO) {

    self.editOutlet.title = NSLocalizedString(@"Done", @"Done");
    self.editOutlet.style = UIBarButtonItemStyleDone;
    [self.tableViewOutlet setEditing:YES animated:YES];

}else {
    self.editOutlet.title = NSLocalizedString(@"Edit", @"Edit"); 
    self.editOutlet.style = UIBarButtonItemStylePlain;
    [self.tableViewOutlet setEditing:NO animated:YES];

    }
}
0 голосов
/ 04 сентября 2017

вы можете попробовать

[self setValue:viewController.navigationItem forKey:@"_navigationItem"];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
0 голосов
/ 03 апреля 2010

Понял! Похоже, вы можете добраться до UINavigationItem с помощью свойства topItem. Просто пришлось читать документы, как всегда!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...