我一直在尝试在Xcode中学习新的Storyboard功能,并且在尝试将UITableView设置为编辑模式时遇到了问题。
到目前为止,我的故事板看起来像这样:
NavigationController - > UIViewController(具有tableview属性的子类)
我在视图控制器场景中添加了导航项和条形按钮项,因此我看到了一个编辑按钮。它没有自动执行任何操作,因此我尝试将其选择器链接到tableview委托的setEditing方法。这确实使它进入了编辑模式。但是,编辑按钮没有更改为“完成”按钮,因此无法退出编辑模式。
我是否必须为“完成”按钮创建另一个导航项?如何连接它以便它在正确的时间出现并正常工作?
答案 0 :(得分:27)
我认为,使用Storyboard,实现有效的编辑/完成按钮的唯一方法(当然,最简单的方法)是使用以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
...
//set the edit button
self.navigationItem.leftBarButtonItem = self.editButtonItem;
...
如果您为项目选择“Master-Detail Application”模板,这就是Apple自己实施的解决方案。
可能Storyboard仍然不完美,希望在下一版本中它将从Apple改进......
答案 1 :(得分:13)
我刚开始使用Storyboard,所以我也想使用Storyboard添加我的编辑按钮。花时间学习如何使用新工具但发现需要一卷胶带来修补孔是很烦人的。
您可以让它工作,但需要添加自定义按钮。在“属性”检查器中,确保“标识符”为“自定义”,标题为“编辑”。
然后在.m
中添加这样的内容- (IBAction)setEditMode:(UIBarButtonItem *)sender {
if (self.editing) {
sender.title = @"Edit";
[super setEditing:NO animated:YES];
} else {
sender.title = @"Done";
[super setEditing:YES animated:YES];
}
}
让自定义编辑按钮调用setEditMode方法。
希望他们将来能够在Storyboard编辑器中修复Edit按钮的实现。
答案 2 :(得分:6)
总结:
由UIViewController.editButtonItem
返回的按钮是一个特殊的切换按钮,具有特殊行为,如果按下则会调用- (void)setEditing:(BOOL)editing animated:(BOOL)animated
。
由UINavigationController.editButtonItem
返回的按钮是一个简单的按钮,只标有“编辑”。
故事板允许选择后者。
答案 3 :(得分:5)
如果您使用导航控制器推送到视图控制器,只需设置self.navigationItem.rightBarButtonItem = self.editButtonItem;
,这将在右侧显示默认的编辑按钮。如果导航栏不可见,请致电self.navigationController.navigationBarHidden = NO;
。那些将在viewDidLoad
方法中调用,或类似的东西。然后,为了使tableView响应编辑调用,请使用以下方法:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[tableView setEditing:editing animated:animated];
}
那应该做你想做的事。如果您有任何问题,请说明,我们可以缩小细节
答案 4 :(得分:2)
要添加@Graham答案,您可能还想更改样式,以便可以使用“完成”按钮样式(蓝色)。像这样:
- (IBAction)setEditMode:(UIBarButtonItem *)sender {
if (self.editing) {
sender.title = @"Edit";
sender.style = UIBarButtonItemStylePlain;
[super setEditing:NO animated:YES];
} else {
sender.title = @"Done";
sender.style = UIBarButtonItemStyleDone;
[super setEditing:YES animated:YES];
}
}
答案 5 :(得分:1)
可以使用Storyboard编辑器中的dumb,not working Edit按钮,然后以编程方式将其替换为UIViewController.editButtonItem
。
在viewDidLoad中:
NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];
[toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem];
[self setToolbarItems:toolbarItems];
此代码假设有人将“哑编辑”按钮添加为故事板工具栏上最左侧的项目。
答案 6 :(得分:1)
如果您有UIViewController并在其中添加了UITableVIew。 如果要添加编辑UIBarButton以便与UITableView交互,请尝试:
添加此行...
- (void)viewDidLoad
{
[super viewDidLoad];
...
self.navigationItem.leftBarButtonItem = self.editButtonItem;
...
}
和这个方法
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.myListTableView setEditing:editing animated:animated];
if(self.myListTableView.editing) {
NSLog(@"editMode on");
} else {
NSLog(@"editMode off");
}
}
,其中
@property (weak, nonatomic) IBOutlet UITableView *myListTableView;