我在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}},以便我可以正确使用它?
答案 0 :(得分:1)
在didSelectRowAtIndexPath
中,变量tableView
为UITableView
。
indexPathIsSelected
的实施位于班级MyTableViewController
,可能 a UITableViewController
。
UITableViewController
和UITableView
是不同的类。
因此,您无法在indexPathIsSelected
上找到方法UITableView
,因为它未在那里实现,而是在MyTableViewController
上实现,这是一个不同的类。
所以...我将采取有根据的猜测并假设didSelectRowAtIndexPath
是班级MyTableViewController
的一部分。如果是这种情况,那么
[self indexPathIsSelected:indexPath]
可能是答案(即在indexPathIsSelected
而不是表格视图中调用self
。
答案 1 :(得分:0)
您看到的错误消息是问题的关键。方法indexPathIsSelected
已在您的自定义类MyTableViewController
中实现。但是,您拥有的UITableView显然仍然是基本的UITableView
。至少您需要进入故事板并将表视图控制器对象的自定义类设置为MyTableViewController
。
要执行此操作,请打开故事板(或笔尖)并选择表视图控制器。然后在身份检查器中(通常在右侧),在自定义类下,从下拉列表中选择MyTableViewController
。