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;