Смена очередности ячеек в Table View

swift
xcode
ios

#1

Пытаюсь реализовать смену очередности по примеру Ивана, но вылезли проблемы. При добавлении @IBAction - self.isEditing = true, по нажатию на кнопку ничего не происходит. В интернете нашел такую запись self.tableView.setEditing(true, animated: true), тэйблВью подключил. При нажатии на кнопку редактирование таблицы открывается, но кнопка в состояние сохранить не возвращается, поэтому отредактированную таблицу не сохранить. В чем проблема?

  @IBAction func editButton(_ sender: UIBarButtonItem) {
        //self.isEditing = true
        self.tableView.setEditing(true, animated: true)
  }

  func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
  }

  func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
    return true
}


#2

Кнопку вы сами должны менять, xcode не может за вас определять действие по кнопке. Смените либо весь правый barItem, либо измените title кнопки на “save” и в action смените действие по этому состоянию.


#3

Нашел такое решение, тк в предыдущем не менялось название кнопки и при повторном нажатии на нее режим изменения не отключался. Теперь режим изменения включается и выключается, но название не меняется все равно. Что не так?

var isEditingMode = false
@IBOutlet weak var editButton: UIBarButtonItem!

@IBAction func editButton(_ sender: UIBarButtonItem) {
    if isEditingMode {
        isEditingMode = false
        self.editButton.title = "Edit"
    } else {
        isEditingMode = true
        self.editButton.title = "Done"
    }
    //self.isEditing = true
    self.tableView.setEditing(isEditingMode, animated: true)
}

#4

Проверьте пожалуйста, как у вас определен editButton:UIBarButtonItem в storyBoard.
Создать объект UIBarButtonItem можно двумя способами - с помощью systemItem и title грубо говоря.

  1. UIBarButtonItem(barButtonSystemItem: <UIBarButtonSystemItem>, target: <AnyObject?>, action: <Selector>)
  2. UIBarButtonItem(title: <String?>, style: <UIBarButtonItemStyle>, target: <AnyObject?>, action: <Selector>)

Если используется первый способ, то так self.editButton.title = “Edit” сменить title не получится, нужно создавать новый объект кнопки.

Если используется второй, то сменить title способом как у вас, возможно.

Поэтому откройте storyBoard, найдите editButton в attributes inspector посмотрете поле systemitem - если там указано “custom” то значит вы можете менять title. Если выбран любой другой пункт - то barItem определен как systemItem и вы не сможете сменить у него title.

ПС. Если вы используете стандартные обозначения действий, то есть Done, Edit и т.д. то лучшим вариантом будет использовать systemItem. Но в любом случае на ваше усмотрение.
Я обычно в равной степени использую и тот и другой способ.


#5

Спасибо, в этом и была причина, в systemitem исправил на custom