我有一个选项卡式视图应用程序,它使用选项卡控制器作为根视图控制器。我拥有的视图之一是一个表格视图,我希望能够通过单击添加/编辑按钮进行编辑,该按钮将使所有单元格都可编辑并允许添加单元格。
在表格视图中,我添加了一个导航栏,并尝试使用以下代码在栏上创建一个按钮,按下该按钮将使所有单元格都可编辑:
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
initWithTitle:@"Delete"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(toggleEdit:)];
self.navigationItem.rightBarButtonItem = editButton;
}
-(IBAction)toggleEdit:(id)sender {
[self.mTableView setEditing:!self.mTableView.editing animated:YES];
if (self.mTableView.editing)
[self.navigationItem.rightBarButtonItem setTitle:@"Done"];
else
[self.navigationItem.rightBarButtonItem setTitle:@"Delete"];
}
该代码不起作用,它不会在导航栏上生成按钮。我已经读过我应该使用导航控制器,但是如果我希望这一页(在我的选项卡式视图应用程序中)使用导航控制器,我如何让选项卡栏指向导航控制器作为选择选项?
----更新----- 好的,我制作了一个包含根视图控制器(标签栏控制器)的 nib 文件。标签栏控制器包含 2 个视图控制器和一个导航控制器,其中包含一个视图控制器。我将导航控制器中的视图控制器链接到包含表格视图的视图。当我运行程序并尝试单击 tableview 的选项卡时,我收到以下错误:
2012-04-29 17:23:28.116 ash[6778:f803]-[UIViewController tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例 0x68bb8d0 2012-04-29 17:23:28.117 ash[6778:f803] *终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因:“-[UIViewController tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例 0x68bb8d0”
我的包含 tableview 的视图控制器是一个 UIViewController 实现
在其 m 文件中,它包含以下方法:
#pragma mark -
#pragma mark Table View Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return [self.portfolioArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *SimpleTableIdentifier = @"CellTableIdentifier";
static BOOL nibsregistered = NO;
if (!nibsregistered) {
UINib *nib = [UINib nibWithNibName:@"ASHInstrumentCell" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:SimpleTableIdentifier];
nibsregistered = YES;
}
ASHInstrumentCell *cell = [tableView dequeueReusableCellWithIdentifier:
SimpleTableIdentifier];
NSUInteger row = [indexPath row];
cell.type.text = [portfolioArray objectAtIndex:row];
return cell;
}
#pragma mark -
#pragma mark Table Delegate Methods
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
NSString *rowValue = [portfolioArray objectAtIndex:row];
NSString *message = [[NSString alloc] initWithFormat:
@"You selected %@", rowValue];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Row Selected!"
message:message
delegate:nil
cancelButtonTitle:@"Yes I Did"
otherButtonTitles:nil];
[alert show];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
NSUInteger row = [indexPath row]
[self.portfolioArray removeObjectAtIndex:row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic] ;
}
我究竟做错了什么?