iPhone - 在UITableView中选择“编辑”按钮时添加“添加”按钮

时间:2013-11-22 18:16:42

标签: ios iphone objective-c uitableview

我的应用程序中有一个表格视图,显示了一些项目。当我点击一个项目时,会出现一个新的表格视图(带有导航控制器:推送)。因此,在Table视图的顶部,现在有一个带有自动“后退”箭头的导航控制器可以返回。我在右侧启用了“编辑”按钮。

现在我希望当我点击编辑按钮时,后退按钮应该消失,并且应该有一个“+”添加按钮而不是后退按钮。这可能吗? 或者可以同时在屏幕上显示“编辑”和“添加”按钮?

感谢

4 个答案:

答案 0 :(得分:7)

这很容易。覆盖视图控制器的setEditing:animated:方法。切换编辑/完成按钮时会调用此方法(假设您使用的是editButtonItem中的标准UIViewController)。

在此方法中,您可以创建一个“添加”按钮,并将其设为左侧栏按钮项。这将隐藏后退按钮。删除“添加”按钮,后退按钮将重新出现。

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

    if (editing) {
        // Add the + button
        UIBarButtonItem *addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction:)];
        self.navigationItem.leftBarButtonItem = addBtn;
    } else {
        // remove the + button
        self.navigationItem.leftBarButtonItem = nil;
    }
}

答案 1 :(得分:2)

是的,这是我使用的方法:

为后退按钮和添加按钮设置属性并将其设置在viewDidLoad中:

self.backButton = self.navigationItem.leftBarButtonItem;
self.addButton  = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPressed:)];

现在您只需交换按钮并在按下“编辑”时相应地更新TableView状态。在这里,我还将“编辑”按钮更改为“完成”:

- (IBAction)editBarButtonPressed:(UIBarButtonItem *)sender {
    if (self.tableView.editing == NO) {
        UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(editBarButtonPressed:)];

        self.navigationItem.rightBarButtonItem = myButton;
        [self.tableView setEditing:YES animated:YES];

        [self.navigationItem setLeftBarButtonItem:self.addButton animated:YES];
    } else {
        UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editBarButtonPressed:)];

        self.navigationItem.rightBarButtonItem = myButton;
        [self.tableView setEditing:NO animated:YES];

        [self.navigationItem setLeftBarButtonItem:self.backButton animated:NO];
    }
}

希望这能回答你的问题。 :) br denrase

答案 2 :(得分:0)

后退箭头按钮是导航控制器按钮。因此,如果您想要消失相同的按钮,那么您必须在下面编写以下代码: -

self.navigationItem.hidesBackButton=YES;

现在,如果您想在导航控制器上添加自定义按钮,请使用以下代码: -

 UIBarButtonItem *customButton = 
 [[UIBarButtonItem alloc] 
                           initWithTitle:@"Add"                                            

  style:UIBarButtonItemStyleBordered 
                           target:self 
                           action:@selector(yourMethod:)];
 self.navigationItem.rightBarButtonItem = customButton;

答案 3 :(得分:0)

您可以在表格视图开始编辑时以编程方式隐藏后退按钮,然后添加"添加"导航栏左侧的按钮。

[self.navigationItem setHidesBackButton:YES];

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonPressed)];
[self.navigationItem setLeftBarButtonItem:addButton];

然后,当用户按下Done时,替换" Add"按钮带有后退按钮:

[self.navigationItem setHidesBackButton:NO];

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;