Подтвердить что ты не робот

Кнопка UITableView Edit/Done

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

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

4b9b3361

Ответ 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:)))
}