Кнопка редактирования / завершения UITableView - PullRequest
19 голосов
/ 12 сентября 2011

Как реализовать кнопку на панели навигации, с помощью которой пользователь сможет изменять порядок и удалять строки UITableView?

Нужно ли создавать собственную кнопку на панели инструментов, чтобы иметь кнопку «Редактировать / Готово» для моего UITableView?

Ответы [ 7 ]

44 голосов
/ 12 сентября 2011

Просто добавьте эту строку в viewDidLoad вашего UITableViewController

self.navigationItem.leftBarButtonItem = self.editButtonItem;

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

20 голосов
/ 12 сентября 2011

Как правило, вы создаете свой собственный BarbuttonItem, а затем назначаете эту кнопку в качестве элемента кнопки правой панели навигации:

UIBarButtonItem *barButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"Edit"
                                                               style:UIBarButtonItemStylePlain
                                                              target:self 
                                                              action:@selector(toggleEdit)];

self.navigationItem.rightBarButtonItem = barButtonItem;   
[barButtonItem release];

Вот метод toggleEdit:

-(void)toggleEdit{
          [self.tableView setEditing:!self.tableView.editing animated:YES]; 

          if (self.tableView.editing) 
              [self.navigationItem.rightBarButtonItem setTitle:@"Done"]; 
          else 
             [self.navigationItem.rightBarButtonItem setTitle:@"Edit"];  
}
6 голосов
/ 09 октября 2013
UIButton *btnname=[UIButton buttonWithType:UIButtonTypeSystem];
[btnname setFrame:CGRectMake(0,0,110,35)];
[btnname setFont:[UIFont boldSystemFontOfSize:18]];
[btnname setTitle: @"Delete" forState: UIControlStateNormal];
[btnname setTitleColor:UIColorFromRGB(0xCC0707)        forState:UIControlStateNormal];
btnname.backgroundColor=UIColorFromRGB(0xE6E7E8);
btnname.showsTouchWhenHighlighted = YES;
[btnname addTarget:self
            action:@selector(toggleEdit)
forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btnname];
self.navigationItem.rightBarButtonItem = barItem;


-(void)toggleEdit{
    [self.tableView setEditing:!self.tableView.editing animated:YES];

    if (self.tableView.editing)
         [btnname setTitle: @"Done" forState: UIControlStateNormal];
    else
         [btnname setTitle: @"Delete" forState: UIControlStateNormal];
}
4 голосов
/ 29 октября 2015

Вот версия Swift, которую я использовал:

func clickedEditButton(button: UINavigationItem) {
    tableView.setEditing(!tableView.editing, animated: true)

    if tableView.editing {
        button.rightBarButtonItem?.title = "Done"
    } else {
        button.rightBarButtonItem?.title = "Edit"
    }
}
0 голосов
/ 11 июля 2019

Это используется в случае, когда на non-UITableViewController UIViewController имеет выход к рассматриваемому UITableView.

Как упоминалось выше, вы не можете изменить значения в элементе панели кнопок, особенно если этосистемный элемент.Если вы хотите, вы можете создать два элемента и сделать их доступными в ivars (например, UITableViewController).Хотя на самом деле не так много времени для создания нового, особенно если его никогда не использовать.

Swift 5

@IBOutlet var table: UITableView!

@IBAction func toggleTableEdit(sender:UIBarButtonItem) {
    table.setEditing(!table.isEditing, animated: true)
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: (table.isEditing) ? .done : .edit, target: self, action: #selector(toggleTableEdit(sender:)))
}
0 голосов
/ 07 марта 2017

Убедитесь, что вам нужно сначала инициализировать заголовок.По storyBoard,

enter image description here

после этого,

@IBAction func editBtnPressed(_ sender: UIBarButtonItem) {
        tableView.setEditing(!tableView.isEditing, animated: true)

        if tableView.isEditing {
            self.editButton.title = "Done"
        } else {
            self.editButton.title = "Edit"
        }
    }
0 голосов
/ 22 сентября 2011

Если вы хотите, чтобы ваша кнопка переключалась между синим цветом «Готово» и обычным цветом «Редактировать», вы можете установить для rightBarButtonItem либо UIBarButtonItemStyleDone для синего, либо UIBarButtonItemStylePlain для простого, как этот

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