0

我有一个导航控制器。我想将编辑按钮放在工具栏的底部而不是顶部导航栏中。

 self.navigationItem.leftBarButtonItem = self.editButtonItem;

我遇到的问题是,当我将编辑按钮添加到底部工具栏时。像这样:

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the row from the data source
    [self.christmasGifts removeGiftAtIndexPath:indexPath];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}   
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:YES];

//Do not let the user add if the app is in edit mode.
if(editing)
    self.navigationItem.rightBarButtonItem.enabled = YES;
else
    self.navigationItem.rightBarButtonItem.enabled = YES;
 }

然后链接编辑按钮 setEditing: 在工具栏中,它不会像顶部导航中的编辑按钮那样显示完成按钮。它只是保持不变。

但是您可以删除一个项目,但您不能使用底部按钮再次将状态重置为正常。

我需要能够从此导航控制器返回到前一个控制器。但是编辑按钮隐藏了后退按钮。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

编辑。

我知道我可以通过代码添加工具栏。

UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
                           initWithTitle:@"Edit"
                           style:UIBarButtonItemStyleBordered
                           target:self
                           action:@selector(setEditing:)];

[[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:70/255.0f green:155/255.0f blue:19/255.0f alpha:1.0]];

NSArray *arrBtns = [[NSArray alloc]initWithObjects:editButton,anotherButton, nil];
self.toolbarItems = arrBtns;

[self.navigationController setToolbarHidden:NO];

甚至

  UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 500, 400, 40)];
  [self.tableView addSubview:toolBar];
4

2 回答 2

2

在您的ViewController.h, 声明(并将它们连接到XIB

@property (strong, nonatomic) IBOutlet UIToolbar *toolbar;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *toolbarbutton;

- (IBAction)toolbarbuttonTouched:(id)sender; // Connect with UIBarButtonItem in XIB

在您的ViewController.m中,粘贴以下函数。

- (IBAction)toolbarbuttonTouched:(id)sender
{
    if ([self.toolbarbutton.title isEqualToString:@"Edit"])
    {
        [self.tableView setEditing:YES animated:YES];
        self.toolbarbutton.title = @"Done";
    }
    else
    {
        [self.tableView setEditing:NO animated:YES];
        self.toolbarbutton.title = @"Edit";
    }
}

你们都准备好了。

积分

  1. UIBarButtonItem的属性初始值title必须设置为“编辑”
  2. 代码editingStyle == UITableViewCellEditingStyleDelete应该可以完美运行

编辑

您不需要以下代码:

self.navigationItem.leftBarButtonItem = self.editButtonItem;

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:YES];

//Do not let the user add if the app is in edit mode.
if(editing)
    self.navigationItem.rightBarButtonItem.enabled = YES;
else
    self.navigationItem.rightBarButtonItem.enabled = YES;
 }

让我知道,它是否适合你。

于 2013-04-09T11:19:50.907 回答
0

通过使用 UIViewController 的editButtonItem方法,我能够更简单地做到这一点:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Place table view Edit button in toolbar, after existing buttons.
    NSMutableArray *items = [self.toolbarItems mutableCopy];
    [items addObject:self.editButtonItem];
    [self setToolbarItems:items animated:YES];
}

这将获取现有的工具栏按钮数组(如果有)并制作数组的可变副本,以便可以更改它。然后它将 UIViewController 的内置编辑按钮添加到工具栏。

结果是一个有效的编辑/完成工具栏按钮,可以打开和关闭编辑模式,而无需编写自己的操作方法来处理它。

于 2016-01-26T06:07:06.830 回答