iPhone - UITableView: изменить имя кнопки редактирования по умолчанию - PullRequest
3 голосов
/ 25 марта 2011

У меня есть обычный editButtonItem в панели навигации (созданный системой), и я хотел бы изменить его имя. Si я написал эти строки в моем TableViewController:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [Some code...]

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    self.navigationItem.rightBarButtonItem.title = @"New name";
}

Это работает, но при входе и выходе из режима редактирования его системное имя восстанавливается. Я попытался снова вызвать его, например, в didEndEditingRowAtIndexPath, но безуспешно ...

Что мне нужно сделать, чтобы исправить это нестандартное имя без необходимости создания кнопки с самого начала в коде ?

Ответы [ 6 ]

18 голосов
/ 29 марта 2012

@ Метод Бояна близок, но очень неэффективен, так как он вызывается для каждой строки.Просто измените заголовок в начале на viewDidLoad и дополнительно сделайте следующее:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    // Make sure you call super first
    [super setEditing:editing animated:animated];

    if (editing)
    {
        self.editButtonItem.title = NSLocalizedString(@"Cancel", @"Cancel");
    }
    else
    {
        self.editButtonItem.title = NSLocalizedString(@"Edit", @"Edit");
    }
}
5 голосов
/ 25 марта 2011

Создайте свой собственный элемент кнопки редактирования, если вам не нравится имя существующего.

Объявите элемент редактирования ivar в своем заголовке, затем создайте элемент следующим образом:

    editItem = [[UIBarButtonItem alloc] initWithTitle:@"New Name" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleEditing)]

В -toggleEditing вызовите

[self setEditing:!self.editing animated:YES]

, а также обновите заголовок кнопки (и, возможно, внешний вид), чтобы отразить состояние редактирования.

2 голосов
/ 14 ноября 2011
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
 {
   if (self.tableView.editing) {
     self.editButtonItem.title =  @"CustomDoneName";
   }
   else
     self.editButtonItem.title = @"CustomEditName";
   return YES;
}

Это прекрасно работает для меня.

0 голосов
/ 20 февраля 2017

Для Swift 3 вы должны переопределить setEditing (_ edit: Bool, animated: Bool) Метод UIViewController как показано ниже:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if self.isEditing {
        self.editButtonItem.title = "[New editing title]"
    }
    else {
        self.editButtonItem.title = "[New to edit title]"
    }
}

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

override func viewDidLoad() {
    super.viewDidLoad()

    self.setEditing(false, animated: false)
    self.navigationItem.leftBarButtonItem = self.editButtonItem
}
0 голосов
/ 24 февраля 2016

Вот единственный способ, которым я обнаружил, чтобы исправить временное сжатое состояние грязного перехода editButtonItem при переключении кнопки с пользовательскими заголовками.

Даже установка возможных названий не дает идеального результата.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{    
    NSString *editButtonTitleBefore = self.editButtonItem.title;
    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:animated];
    [self setToolbarLayout];

    if (editing && ![self.editButtonItem.title isEqualToString:NSLocalizedString(@"Cancel", @"Cancel")])
    {
        self.editButtonItem.title = NSLocalizedString(@"Cancel", @"Cancel");
    }
    else if (!editing && ![editButtonTitleBefore isEqualToString:@"Edit"])
    {
        // Dirty hax to avoid the editButton system title label shrink bug
        self.editButtonItem.title = @"";
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            self.editButtonItem.title = NSLocalizedString(@"Edit", @"Edit");
        });
    }
}
0 голосов
/ 06 августа 2015

Чтобы дополнить эти ответы. Обычай - это путь НО имейте в виду:

Если вы создадите свою собственную кнопку, которая изменит название, убедитесь, что вы установили свойство возможных имен .

self.myEditButton.possibleTitles = [NSSet setWithObjects:@"Edit Seats", @"Done", nil];

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

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