【发布时间】:2015-10-21 20:34:46
【问题描述】:
我在导航控制器中嵌入了一个 ViewController(带有容器视图)。该容器包含一个 pageViewController,其中一个“页面”是 TableViewController(带有 UITableView 出口:“aTableView”)。我想在导航栏中点击自定义编辑按钮时触发 tableViewController 中的编辑模式。当我在 tableViewController 中创建自定义 editutton 时,编辑模式按预期工作,但是当我在导航栏中使用自定义 editButton 时,即使我在 editButton 选择器中将 setEditing 设置为 YES,setEditing 布尔值仍然为零。代码如下:
ViewController.m
-(void)viewDidLoad {
self.editBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[self.editBtn setFrame:CGRectMake(0, 0, 40, 22)];
[self.editBtn addTarget:self action:@selector(goToToggleEdit:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *editButton=[[UIBarButtonItem alloc]initWithCustomView:self.editBtn];
self.navigationItem.rightBarButtonItem = editButton;
}
-(void)goToToggleEdit:(id)sender
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TableViewController *tvc = [storyboard instantiateViewControllerWithIdentifier:@"aTableViewController"];
if(something==foo){
[tvc toggleEdit];
}
}
aTableViewController.h
@interface aTableViewController : UITableViewController <UITextFieldDelegate> {
IBOutlet UITableView *aTableView;
}
-(void) toggleEdit ;
@end
aTableViewController.m
-(void)toggleEdit {
[aTableView setEditing:YES animated:YES];
NSLog(aTableView.editing ? @"Yes" : @"No"); // --> logss 'No'.
if (aTableView.editing){
//do something
}
else {
//do something else
}
}
我怎样才能以这种方式有效地触发 tableViewController 中的编辑模式?
编辑
@Bagrat Kirakosian 向我指出我的视图层次结构(导航控制器 > 视图控制器(带有容器)> 页面视图控制器(在容器中)> 表视图控制器)可能是问题所在。我只想创建一个固定的导航栏(带有编辑按钮),因此我不能将表格视图控制器直接嵌入导航控制器中。
谢谢。
更新:解决方案
我接受了@sebastien 的解决方案,尽管@sebastien 和@Bagrat 的解决方案都很好用。 @Bagrat 的答案包括直接访问 Table View Controller,而 @sebastien 的解决方案在 pageViewController 中调用编辑模式。我认为,考虑到棘手的层次结构,后者更安全一些。
【问题讨论】:
-
你应该提供更多你的代码,特别是,我们需要看看你是如何实现你的
UITableView和你的editButton -
检查编辑。我更新了一些示例代码。
-
尝试将
if(something==foo)更改为if(true) -
已经试过了,没有成功。检查aTableViewController.m,log = NO。
标签: ios objective-c uitableview uiviewcontroller edit