Кнопка UITableView Edit/Done
Как я могу реализовать кнопку на панели навигации, посредством которой пользователь сможет изменить порядок и удалить строки UITableView?
Нужно ли мне создать собственную кнопку на панели инструментов, чтобы кнопка Изменить/Готово для моего UITableView?
Ответы
Ответ 1
Просто добавьте эту строку в viewDidLoad
вашего UITableViewController
self.navigationItem.leftBarButtonItem = self.editButtonItem;
Он будет работать, если надстройка просмотра таблиц UINavigationController
. Эта строка добавит кнопку, которая будет вызывать таблицу в режиме редактирования и из нее.
Ответ 2
В общем, вы создаете свой собственный 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"];
}
Ответ 3
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
Вот быстрая версия, которую я использовал:
func clickedEditButton(button: UINavigationItem) {
tableView.setEditing(!tableView.editing, animated: true)
if tableView.editing {
button.rightBarButtonItem?.title = "Done"
} else {
button.rightBarButtonItem?.title = "Edit"
}
}
Ответ 5
Если вы хотите, чтобы ваша кнопка переключалась между голубым цветом "Готово" и обычным цветом "Изменить", вы можете установить для параметра rightBarButtonItem значение UIBarButtonItemStyleDone для синего или UIBarButtonItemStylePlain для простого, как этот
self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone;
Ответ 6
Убедитесь, что вам нужно сначала инициализировать заголовок. С помощью storyBoard,
![введите описание изображения здесь]()
после этого
@IBAction func editBtnPressed(_ sender: UIBarButtonItem) {
tableView.setEditing(!tableView.isEditing, animated: true)
if tableView.isEditing {
self.editButton.title = "Done"
} else {
self.editButton.title = "Edit"
}
}
Ответ 7
Это используется в случае, когда на не-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:)))
}