UITableView
にUIViewController
があり、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
}
}
アクション付きで以下のように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
の関数名に追加されます
それが役に立てば幸い!
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:
これは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
がこれを処理し、tableView
のsetEditing
メソッドを使用してテーブルビューの編集状態を切り替えます。
出典:
ボタンクリックでこのメソッドを呼び出します。
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"))
}
}
これにより、バーボタンのタイトルも変更されます。
ビューコントローラーの-setEditing:animated:
をオーバーライドし、superを呼び出して、テーブルビューで同じメソッドを呼び出します。
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
}
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))
}
}
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)
}
}