web-dev-qa-db-ja.com

テーブルビューを編集モードに設定する

UITableViewUIViewControllerがあり、IBではなくコードから編集ボタンを追加しました。これにはUITableViewControllersが付属していますが、UIVCは付属していません。このボタンを使用して、テーブルビューをすばやく編集モードにするにはどうすればよいですか?助けてくれてありがとう。

class WordsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate  {
  override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.rightBarButtonItem = self.editButtonItem()
  }

  func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
  }
}
11
richc

アクション付きで以下のようにrightBarButtonItemを作成します。

viewDidLoad()で:

let rightButton = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showEditing:"))
    self.navigationItem.rightBarButtonItem = rightButton

次に、次のような関数を作成します。

 func showEditing(sender: UIBarButtonItem)
 {
    if(self.tableView.isEditing == true)
    {
        self.tableView.isEditing = false
        self.navigationItem.rightBarButtonItem?.title = "Done"   
    }
    else
    {
        self.tableView.isEditing = true
        self.navigationItem.rightBarButtonItem?.title = "Edit" 
    }
}

確認してください、 :は、SelectorのアクションのviewDidLoadの関数名に追加されます
それが役に立てば幸い!

21
iRiziya

Swift 3&4 IMHOの答えbetter他の答えよりも良い:

override func viewDidLoad() {
    super.viewDidLoad()

    let editButton = UIBarButtonItem(title: "Edit", style: .plain, target: self, action: #selector(toggleEditing)) // create a bat button
    navigationItem.rightBarButtonItem = editButton // assign button
}

@objc private func toggleEditing() {
    listTableView.setEditing(!listTableView.isEditing, animated: true) // Set opposite value of current editing status
    navigationItem.rightBarButtonItem?.title = listTableView.isEditing ? "Done" : "Edit" // Set title depending on the editing status
}

Whyだと思いますかbetter

  1. 少ないコード行。
  2. バーボタンは一度だけ初期化されますが、ボタンを押すたびに初期化されるわけではありません。
15
Tung Fam

これはSwift 4.2の解決策です:

override func viewDidLoad() {
  super.viewDidLoad()

  // Use the edit button provided by the view controller.
  navigationItem.rightBarButtonItem = editButtonItem
}

override func setEditing(_ editing: Bool, animated: Bool) {
    // Takes care of toggling the button's title.
    super.setEditing(!isEditing, animated: true)

    // Toggle table view editing.
    tableView.setEditing(!tableView.isEditing, animated: true)
}

ビューコントローラのsetEditingは、editButtonItemが押されたときにデフォルトで呼び出されます。デフォルトでは、ボタンのトグルのタイトルは「編集」と「完了」の間で切り替えられるため、super.setEditingがこれを処理し、tableViewsetEditingメソッドを使用してテーブルビューの編集状態を切り替えます。

出典:

14
Jared Cleghorn

ボタンクリックでこのメソッドを呼び出します。

tableView.setEditing(true, animated: true)

または、トグルのように機能させたい場合

tableView.setEditing(!tableView.editing, animated: true)

プレス時にeditButtonPressedを呼び出すボタンがあると思います。したがって、このメソッドの実装は次のようになります。

override func viewDidLoad(){
 navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editButtonPressed"))
}

func editButtonPressed(){
  tableView.setEditing(!tableView.editing, animated: true) 
  if tableView.editing == true{
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editButtonPressed"))
  }else{
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editButtonPressed"))
  }
} 

これにより、バーボタンのタイトルも変更されます。

8
Juri Noga

ビューコントローラーの-setEditing:animated:をオーバーライドし、superを呼び出して、テーブルビューで同じメソッドを呼び出します。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];

    [self.tableView setEditing:editing animated:animated];
}
3

NjuriポストのSwift 3.0バージョン:

override func viewDidLoad() {
    super.viewDidLoad()

    PackageNameLabel.text = detailPackageName
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.plain, target: self, action: #selector(PackageDetailsTableViewController.editButtonPressed))

}


func editButtonPressed(){
    tableView.setEditing(!tableView.isEditing, animated: true)
    if tableView.isEditing == true{
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(PackageDetailsTableViewController.editButtonPressed))
    }else{
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.plain, target: self, action: #selector(PackageDetailsTableViewController.editButtonPressed))
    }
}
1
Mike Kirkwood

Swift4.2 UIボタンで編集するとき

   //On Button Click
       @IBAction func mEditBtnAct(_ sender: Any) {
        if(self.mtableView.isEditing == true)
        {
            self.mtableView.isEditing = false
            self.mEditBtnOut.setTitle("Edit", for: .normal)
        }
        else
        {
            self.mTimerTablevw.isEditing = true
            self.mEditBtnOut.setTitle("Done", for: .normal)
        }
    }
0