UITableView accessoryType在UITableView的后半部分中消失

我有一个iPad应用程序(XCode 4.6,ARC,Storyboards,iOS 6.2.3)。 我有一个UITableView的UIPopover,它有21行。 我可以在所有行中随机设置accessoryType ,但只有在前12行中, 辅助类型设置(复选标记)才会保留,因此可以在另一种方法中检查并处理。 我没有看到前12行和最后9行之间有任何区别。 UITableView是可滚动的,所以要到达第11行之后的行,您必须滚动到底部

以下是设置accessoryType的代码:

#pragma mark didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    //  get the cell that was selected
    UITableViewCell *theCell = [tableView cellForRowAtIndexPath:indexPath];

    if(theCell.accessoryType != UITableViewCellAccessoryCheckmark)
        theCell.accessoryType = UITableViewCellAccessoryCheckmark;
    else
        theCell.accessoryType = UITableViewCellAccessoryNone;
}

这里是我检查accessoryType并处理它的代码:

-(void) moveServices  {  //  (moves checked tableViewRows to services tableview)

NSMutableString *result = [NSMutableString string];

for (int i = 0; i < [servicesArray count]; i++) {
    NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
    [tvServices scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

    UITableViewCell *cell = [tvServices cellForRowAtIndexPath:path];
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        [result appendFormat:@"%@, ",cell.textLabel.text];
    NSLog(@"nni: %dncell.accessoryType: %dncell.textLabel: %@",i,cell.accessoryType, cell.textLabel);
    }
}

if (result.length > 2) {  //  move to text box in main menu
    storeServices =[result substringToIndex:[result length] - 2];
}

}


它看起来像是混合了“数据源”的概念和表格中单元格的内容。 不要这样做 - 将特定单元格的设置与某个特定单元格是否显示复选标记分开存放(无论表格中是否有特定行应显示基于程序逻辑的复选标记)。 然后在cellForRowAtIndexPath ,构建单元以匹配数据源的当前设置。 原因是UITableView重用了基于哪些行在屏幕上可见的单元实例(这只是一个很好的MVC设计)。

在你的情况下,你应该在你的类中保留一个NSMutableArray属性来记录整个表的设置,并使用cellForRowAtIndexPath该数组的值来设置该特定的单元格。 然后,控制器中的其他“业务逻辑”方法使用数组属性来查询模型状态,而不是单元格设置(这是视图的一部分,应该独立于数据模型)。

链接地址: http://www.djcxy.com/p/84421.html

上一篇: UITableView accessoryType disappears in last half of UITableView

下一篇: Modify didSelectRowAtIndexPath for StoryBoard Usage, IOS