是否有一个技巧可以将行插入带有通过Storyboard配置的静态单元的TableView中?

时间:2012-08-02 17:27:36

标签: iphone ios uitableview uistoryboard xcode-storyboard

我有一个通过Static Cells在Storyboard中创建的TableView。

这个想法是一个部分有一行带有Label和Switch。当用户点击开关“打开”时,该部分会在下面发芽一些新行。与“设置”应用中的Wi-Fi设置有些相似(添加了新的部分,但我添加了新行)。

enter image description here

我正在通过Storyboard创建这个TableView,如下所示:

enter image description here

现在,当开关值改变时采取的行动:

- (IBAction)hitSwitch:(id)sender {

    NSArray *indexPathsArray = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:1 inSection:0], [NSIndexPath indexPathForRow:2 inSection:0], nil];



    UISwitch *theSwitch = sender;

    [self.tableView beginUpdates];

    if (theSwitch.on) {

        [self.tableView insertRowsAtIndexPaths:indexPathsArray withRowAnimation:UITableViewRowAnimationAutomatic];

    } else {

        [self.tableView deleteRowsAtIndexPaths:indexPathsArray withRowAnimation:UITableViewRowAnimationAutomatic];

    }

    [self.tableView endUpdates];

}

我希望调用普通的表视图数据源方法来显示这些新行的单元格,所以我添加了以下代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (self.addRowsSwitch.on) {

        return 3;

    } else {

        return [super tableView:tableView numberOfRowsInSection:section];

    }

}



- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (!self.addRowsSwitch.on) {

        return [super tableView:tableView cellForRowAtIndexPath:indexPath];

    } else {

        UITableViewCell *newCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

        return newCell;

    }

}

但根据我方便的调试器,tableView:numberOfRowsInSection:被调用,返回一个值,然后应用程序崩溃,然后调用tableView:cellForRowAtIndexPath。

  

2012-08-02 13:16:08.564 TableViewInsertTest [3186:f803] *终止   应用程序由于未捕获的异常'NSRangeException',原因:'*    - [__ NSArrayI objectAtIndex:]:索引1超出边界[0 .. 0]'   ***第一次抛出调用堆栈:(0x14b2022 0xeb2cd6 0x149e644 0x43bea5 0x2481a8 0x1f3688 0x1f4c2a 0x9743e 0xa50b7 0xa50e5 0x2604 0x14b3e99   0x1814e 0x180e6 0xbeade 0xbefa7 0x212c16 0x93b85d 0x1486936 0x14863d7   0x13e9790 0x13e8d84 0x13e8c9b 0x139b7d8 0x139b88a 0x15626 0x1ebd   0x1e25)

我需要做些什么来使这项工作,或者我试图实施的行为类型不受支持?

0 个答案:

没有答案