【问题标题】:Editing a tableview in a tabbed application在选项卡式应用程序中编辑表格视图
【发布时间】:2012-04-28 20:02:59
【问题描述】:

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

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

- (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 个视图控制器和一个导航控制器,其中包含一个视图控制器。我将导航控制器中的视图控制器链接到包含表格视图的视图。当我运行程序并尝试单击表格视图的选项卡时,我收到以下错误:

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

我做错了什么?

【问题讨论】:

    标签: uitableview uinavigationcontroller uinavigationbar


    【解决方案1】:

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

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

     self.navigationItem.rightBarButtonItem = self.editButtonItem;
    

    【讨论】:

    • 我已经更新了我原来的问题,以表明到目前为止我已经尝试过什么,但我仍然遇到问题
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多