簡體   English   中英

UITableView編輯/完成按鈕

[英]UITableView Edit/Done Button

如何在導航欄上實現一個按鈕,用戶可以重新排序和刪除UITableView的行?

我是否必須創建自己的工具欄按鈕才能擁有UITableView的編輯/完成按鈕?

只需在UITableViewController viewDidLoad中添加此行即可

self.navigationItem.leftBarButtonItem = self.editButtonItem;

如果您的表視圖superview是UINavigationController ,它將工作。 此行將添加按鈕,該按鈕將在編輯模式下推出表格。

通常做的是創建自己的自定義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"];  
}
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];
}

這是我使用的Swift版本:

func clickedEditButton(button: UINavigationItem) {
    tableView.setEditing(!tableView.editing, animated: true)

    if tableView.editing {
        button.rightBarButtonItem?.title = "Done"
    } else {
        button.rightBarButtonItem?.title = "Edit"
    }
}

確保您需要先初始化標題。 通過storyBoard,

在此輸入圖像描述

之后,

@IBAction func editBtnPressed(_ sender: UIBarButtonItem) {
        tableView.setEditing(!tableView.isEditing, animated: true)

        if tableView.isEditing {
            self.editButton.title = "Done"
        } else {
            self.editButton.title = "Edit"
        }
    }

這是在非UITableViewController UIViewController有一個出口到UITableView的情況下使用的情況。

如上所述,您無法更改欄按鈕項中的值,特別是如果它是系統項。 如果您願意,可以創建兩個項目並在ivars中使用它們(如UITableViewController)。 雖然創建一個新的執行時間並不是那么多,特別是如果它永遠不會被使用的話。

斯威夫特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:)))
}

如果您希望按鈕在藍色“完成”顏色和普通“編輯”顏色之間切換,您可以將rightBarButtonItem設置為UIBarButtonItemStyleDone為藍色,或者將UIBarButtonItemStylePlain設置為如此

self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM