0

我有一个选项卡式视图应用程序,它使用选项卡控制器作为根视图控制器。我拥有的视图之一是一个表格视图,我希望能够通过单击添加/编辑按钮进行编辑,该按钮将使所有单元格都可编辑并允许添加单元格。

在表格视图中,我添加了一个导航栏,并尝试使用以下代码在栏上创建一个按钮,按下该按钮将使所有单元格都可编辑:

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

我究竟做错了什么?

4

2 回答 2

0

两点:首先,aUINavigationController是 的子类UIViewController,因此您可以创建一个 UINavigationController 的实例,其 rootViewController 是您的 tableViewController,并让 TabBarController 将导航控制器作为其选项卡之一进行管理。

还要注意 UIViewController 类已经有一个editButtonItem你应该使用的属性,而不是创建你自己的按钮:

 self.navigationItem.rightBarButtonItem = self.editButtonItem;
于 2012-04-28T21:11:20.647 回答
0

好的,我想我知道我做错了什么。我为我的选项卡视图控制器创建了一个 nib 文件,并为此添加了视图控制器和导航控制器(它本身包含一个 tableview 控制器)。

我没有做的一件事是将正确的类类型分配给我的选项卡中的视图控制器。如果我创建了一个具有 IBOutlets 的自定义视图控制器类 firstviewcontroller 并且我没有在我的选项卡控制器 nib 中将视图控制器指定为 firstviewcontroller 类,我会得到那个奇怪的键值错误。

我遇到的第二个问题是选项卡视图控制器不会自动旋转,即使我想显示的所有视图都允许使用以下代码进行自动旋转:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        // Return YES for supported orientations
     return YES;
    }

再次出现这种情况的原因是我没有将每个视图控制器的类(在我的 tabbedviewcontroller nib 文件中)指定为我希望它们显示的自定义类。

一旦我指定了他们的班级类型,一切就都到位了。

于 2012-04-29T19:30:51.683 回答