Objective-C:如何声明/定义tableView上使用的方法

时间:2013-03-15 15:58:57

标签: ios objective-c uitableview

我在UITableView问题中回答了- (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]; } 中多行选择的初始问题。但答案让我无法独自继续,因为我对Objective C和iOS开发并不熟悉。

this回答之后,我想实现他/她建议的代码:

indexPathIsSelected

我仍然需要这些方法,我认为我可以为@interface MyTableViewController () - (BOOL)indexPathIsSelected:(NSIndexPath *)indexPath; @end @implementation MyTableViewController // ... - (BOOL)indexPathIsSelected:(NSIndexPath *)indexPath { BOOL bIsSelected = NO; // ... return bIsSelected; } @end (例如)这样做:

[tableView indexPathIsSelected:indexPath]

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

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

如何正确定义和声明方法{{1}},以便我可以正确使用它?

2 个答案:

答案 0 :(得分:1)

didSelectRowAtIndexPath中,变量tableViewUITableView

indexPathIsSelected的实施位于班级MyTableViewController可能 a UITableViewController

UITableViewControllerUITableView是不同的类。

因此,您无法在indexPathIsSelected上找到方法UITableView,因为它未在那里实现,而是在MyTableViewController上实现,这是一个不同的类。

所以...我将采取有根据的猜测并假设didSelectRowAtIndexPath是班级MyTableViewController的一部分。如果是这种情况,那么

[self indexPathIsSelected:indexPath]

可能是答案(即在indexPathIsSelected而不是表格视图中调用self

答案 1 :(得分:0)

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

要执行此操作,请打开故事板(或笔尖)并选择表视图控制器。然后在身份检查器中(通常在右侧),在自定义类下,从下拉列表中选择MyTableViewController