3

我有一个allowsMultipleSelection在情节提要中设置为 YES 的 tableView。

编辑

我错了一件事……[tableView indexPathsForSelectedRows]didSelectRowAtIndexPath.

但是,在我重新加载表格后它不起作用,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

4 回答 4

2

不能selected直接设置属性

所以而不是

cell.selected = YES;

利用

[tableView selectRowAtIndexPath:TheIndexPAth animated:YES scrollPosition:UITableViewScrollPositionBottom];
于 2012-11-07T20:46:08.317 回答
1

尝试[cell setSelected:YES animated:YES]

我很确定cell.selected是只读的

于 2012-11-07T20:48:15.897 回答
1

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

并尝试:

//在你的界面中

 @interface YourClass (){
 NSInteger _selectedIndex;
 }

// cellForRowAtIndexPath: 方法

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

// didSelectRowAtIndexPath: 方法

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

}

于 2012-11-08T00:39:43.890 回答
0

自从问题改变以来有点不公平,但是..对我来说..答案是不要使用

indexPathsForSelectedRows

或者不打电话

reloadTable

在你的 tableView 上。

我选择了后者,我在里面装饰了附件,didSelectRowdidDeselectRow不是在重新加载时进行,只是从不重新加载桌子。

如果有人可以提出涉及上述两者的解决方案,我将选择该答案。

于 2012-11-08T16:54:57.973 回答