iphone - 如果 tableview 的行数多于它在 ipad 屏幕上显示的行数,则 didselectrowatindexpath 方法无法正常工作

标签 iphone objective-c ios ipad

当我选择一行时,我让 didSelectRowAtIndexPath 放置了一个复选标记指示器。我的 TableView 显示在弹出窗口中,并且有更多数据可以容纳在屏幕中。问题是当我向下滚动以查看更多行时,滚动时加载的第一个单元格也有复选标记指示器。

例如,如果我的 TableView 中有 30 行,如果我在屏幕上选择我的行,则屏幕可以容纳 15 行。如果我滚动查看更多行,第 16 行也有复选标记。 同样,如果我选择 2 行并向下滚动,第 17 行也会被选中。

我一次只需要让用户选择一行。我的 didselectrowatindexpth 无法始终如一地工作。如果有人有合适的工作版本,请分享或建议我如何解决这个问题。 此外,我的 TableView 中有两个部分。因此,用户只能从任何一个部分中选择一行。

我的 didSelectRowAtIndexPath 代码。

int newRow = [indexPath row];
int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;

if (newRow != oldRow || (newRow == 0 && oldRow == 0)) {
    UITableViewCell *cell = [bTableView cellForRowAtIndexPath:indexPath];
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    UITableViewCell *oldCell = [bTableView cellForRowAtIndexPath:lastIndexPath];
    oldCell.accessoryType = UITableViewCellAccessoryNone;
    lastIndexPath = indexPath;

最佳答案

您对单元格所做的任何更改都应在 cellforrowatindexpath 委托(delegate)方法中重置,因为它们将被重用。因此在此方法中返回单元格之前重置。并有一个变量来保存选定的值并相应地更新。所以基本上您的数据源应该能够保存所选行的值而不是单元格。

关于iphone - 如果 tableview 的行数多于它在 ipad 屏幕上显示的行数,则 didselectrowatindexpath 方法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201324/

相关文章:

ios - 解析以下 PFUser

iphone - 使用加速度计或核心运动框架查找速度。

iphone - 兴趣点 API/Web 服务

iphone - 如何合并Sqlite数据库中按日期排序的2个表的数据?

ios - 带有 ipv6 的 libssh2 lib 不工作

iphone - 解读 iOS 崩溃报告

ios - 如何修改或更改 PopoverPresentationController 的大小?

ios - 如何判断模拟器中运行的设备?

iphone - UIImage 到 base64 字符串编码

ios - 有条件的 if 为 objective-c 导入