UITableView和indexPathsForSelectedRows

时间:2012-11-07 20:44:01

标签: ios uitableview

我有一个tableView,我在故事板中将allowsMultipleSelection设置为YES。

修改

我错了一件事...... [tableView indexPathsForSelectedRows]didSelectRowAtIndexPath期间确实返回了一个带有1个对象的NSArray。

然而,在我重新加载表格之后它在cellForRowAtIndexPath中不起作用,因此它会检查要应用的附件(复选标记或不是)。

在最初的问题中,我试图手动选择行...显然这是由tableView本身处理..但是在某个地方它会自动取消选择我的行,因为我从来没有在其上调用deselectRowAtIndexPath ...

原始问题:

出于某种原因,当我将单元格设置为选中时,它不会改变。

- (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    //cell does not update selected property to YES after this next line
    cell.selected = YES;

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]  
               withRowAnimation:UITableViewRowAnimationFade];
}

我想我可以自己跟踪所选择的索引路径......但我可以发誓我之前使用的方法indexPathsForSelectedRows成功了...

4 个答案:

答案 0 :(得分:2)

您无法直接设置selected属性

所以而不是

cell.selected = YES;

使用

[tableView selectRowAtIndexPath:TheIndexPAth animated:YES scrollPosition:UITableViewScrollPositionBottom];

答案 1 :(得分:1)

尝试[cell setSelected:YES animated:YES]

我非常确定cell.selected是只读的

答案 2 :(得分:1)

请在pastbean中发布此课程的所有代码,并将链接放在此处,我们需要更多信息,

并尝试:

//在您的界面中

 @interface YourClass (){
 NSInteger _selectedIndex;
 }

// cellForRowAtIndexPath:method

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  
 *)indexPath
 {
 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

// didSelectRowAtIndexPath:method

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
_selectedIndex = indexPath.row;
[self.tableView reloadData];

}

答案 3 :(得分:0)

有点不公平,因为问题改变了但是..对我来说......答案是要么不要使用

indexPathsForSelectedRows

或不要致电

reloadTable

在你的tableView上。

我选择了后来,我在didSelectRowdidDeselectRow中修饰了配件,而不是在重新加载时进行修饰而只是从不重新加载表格。

如果某人能够提出涉及上述两种情况的解决方案,我会选择该答案。