自定义editButtonItem - 用于完成状态的选择器

时间:2011-12-19 21:17:06

标签: iphone objective-c ios uibarbuttonitem

我正在使用以下代码创建自定义修改按钮项目:

UIButton *editButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [editButton addTarget:self action:@selector(startEditing) forControlEvents:UIControlEventTouchUpInside];
    [editButton setTitle:@"Filters" forState:UIControlStateNormal];
    editButton.frame = CGRectMake(editButton.frame.origin.x, editButton.frame.origin.y, 60.0, 30.0);
    [editButton setBackgroundImage:[UIImage imageNamed:@"contact_btn_bg.png"] forState:UIControlStateNormal];
    [editButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [editButton.titleLabel setFont:[UIFont boldSystemFontOfSize:12.0f]];

    UIBarButtonItem *cEditButtonItem = [[UIBarButtonItem alloc] initWithCustomView:editButton];

    self.navigationItem.rightBarButtonItem = cEditButtonItem;
    [editButton release];

但我不确定如何自定义“完成”状态。当然我可以使用if / then开关调用一个新的(void)finishEditing程序但是我不确定在完成编辑过程中需要什么,也不确定我是否应该结合状态的想法在这个或者只是在需要时切换正常状态按钮。

我的(void)startEditing看起来像这样:

- (void)startEditing {
    [self setEditing:YES animated:YES];
}

1 个答案:

答案 0 :(得分:3)

以下是我在应用中处理此问题的方法。

首先,在您的班级上为您的两个UIBarButtonItem创建两个属性。

@property (nonatomic, retain) UIBarButtonItem *editButton;
@property (nonatomic, retain) UIBarButtonItem *doneButton;

确保它们已合成,并使用-viewDidLoad中的相应目标/操作对其进行配置。现在创建一个返回UIBarButtonItem

的方法
- (UIBarButtonItem *)leftBarButtonItem
{
    if (self.tableView.editing)
        return self.doneButton;

    return self.editButton;
}

现在,在您已分配到“编辑”和“完成”按钮的方法中,您只需在UINavigationItem中将相应的按钮设置为我们创建的方法。

[self.navigationItem setLeftBarButtonItem:self.leftBarButtonItem animated:YES];