iPhone Storyboard编辑表格视图

我一直在试图学习Xcode中的新的Storyboardfunction,我遇到了尝试设置UITableView编辑模式的问题。

到目前为止,我的故事板是这样的:

NavigationController – > UIViewController(具有tableview属性的子类)

我添加了一个导航项目和一个栏button项目的视图控制器的场景,所以我看到一个编辑button。 它没有自动做任何事情,所以我尝试将select器链接到tableview委托的setEditing方法。 这确实把它编辑模式。 但是,编辑button并没有变成“完成”button,所以没有办法退出编辑模式。

我是否必须为完成button创build另一个导航项目? 如何连接它,以便在正确的时间出现并正常工作?

我刚开始使用Storyboard,所以我也想用Storyboard来添加我的Editbutton。 花时间学习如何使用新工具,但发现需要一卷胶带来修补这些孔是令人讨厌的。

你可以得到它的工作,但需要添加一个自定义button。 在属性检查器中,确保标识符是自定义的,标题是编辑。

然后在你的.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]; } } 

让你的自定义编辑button调用setEditMode方法。

只能希望将来能修复“故事板”编辑器中“编辑”button的实现。

我认为,与故事板,唯一的方式(当然,最简单的)来实现一个工作编辑/完成button ,是使用下面的代码:

 - (void)viewDidLoad { [super viewDidLoad]; ... //set the edit button self.navigationItem.leftBarButtonItem = self.editButtonItem; ... 

如果您为项目select“主从应用程序”模板,则这是Apple自己实现的解决scheme。

可能故事板仍然不是完美的,希望它会在下一个版本中从苹果公司改进…

总结:

UIViewController.editButtonItem返回的Button是一个特殊的切换button,具有调用- (void)setEditing:(BOOL)editing animated:(BOOL)animated如果按下- (void)setEditing:(BOOL)editing animated:(BOOL)animated特殊行为。

UINavigationController.editButtonItem返回的Button是一个简单的Button,只是标有“Edit”。

故事板允许select后者。

如果您使用导航控制器推送到视图控制器,只需设置self.navigationItem.rightBarButtonItem = self.editButtonItem; ,这将把右侧的默认编辑button。 如果导航栏不可见,请调用self.navigationController.navigationBarHidden = NO; 。 这些将在viewDidLoad方法或类似的东西中被调用。 然后为了让tableView响应编辑调用,使用下面的方法:

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

这应该做你想做的事情。 如果你有任何问题,只要这样说,我们可以缩小细节

要添加到@Graham答案,您可能还想要更改样式,以便您可以有“完成”button样式(蓝色)。 像这样的东西:

 - (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]; } } 

人们可以使用愚蠢的,不工作编辑button从故事板编辑器,然后以编程方式replace它与UIViewController.editButtonItem

在viewDidLoad中:

  NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems]; [toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem]; [self setToolbarItems:toolbarItems]; 

这段代码假设你已经在故事板中的工具栏上添加了哑键编辑button作为最左边的项目。

如果你有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;