0

我最初在 a 中选择多行的问题UITableView已在问题中得到解答。但答案让我无法独自继续下去,因为我对 Objective C 和 iOS 开发非常陌生。

按照daxnitro的回答,我想实现他/她建议的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([tableView indexPathIsSelected:indexPath]) {
        [tableView removeIndexPathFromSelection:indexPath];
    } else {
        [tableView addIndexPathToSelection:indexPath];
    }
    // Update the cell's appearance somewhere here
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

我仍然需要这些方法,我认为我可以这样做indexPathIsSelected(例如)这样:

@interface MyTableViewController ()
- (BOOL)indexPathIsSelected:(NSIndexPath *)indexPath;
@end

@implementation MyTableViewController

// ...

- (BOOL)indexPathIsSelected:(NSIndexPath *)indexPath
{
    BOOL bIsSelected = NO;
    // ...
    return bIsSelected;
}
@end

但这不起作用。错误消息是:“UITableView”没有可见的@interface 声明选择器“indexPathIsSelected:”注意:如果我在.h 文件的界面中声明方法,也会发生同样的情况。

现在,让我感到困惑的是:[tableView indexPathIsSelected:indexPath]以某种方式调用tableView对象,我什至不知道为什么。这是我在方法声明/定义中必须考虑的事情吗?我现在真的很愚蠢,我什至不能通过看到它的调用来编写一个方法。

如何正确定义和声明方法indexPathIsSelected,以便正确使用它?

4

2 回答 2

1

在您的didSelectRowAtIndexPath中,变量tableView是 a UITableView

您的实现indexPathIsSelected在类MyTableViewController中,这可能是一个UITableViewController.

UITableViewController并且UITableView是不同的类别。

所以你找不到方法indexPathIsSelectedUITableView因为它没有在那里实现,MyTableViewController它是在不同的类上实现的。

所以...我将进行有根据的猜测,并假设这didSelectRowAtIndexPath是课堂的一部分MyTableViewController。如果是这种情况,那么

[self indexPathIsSelected:indexPath]

可能是答案(即调用indexPathIsSelectedself不是表视图)。

于 2013-03-15T16:07:52.817 回答
0

您看到的错误消息是问题的关键。该方法indexPathIsSelected在您的自定义类中实现MyTableViewController。但是,您拥有的 UITableView 显然仍然是基本的UITableView. 至少您需要进入情节提要并将表格视图控制器对象的自定义类设置为MyTableViewController.

为此,请打开情节提要(或 nib)并选择表格视图控制器。然后在身份检查器中(通常在右侧),在自定义类下,MyTableViewController从下拉列表中选择。

于 2013-03-15T16:06:20.533 回答