我有以下UITableViewCell
(好的,子类)。
使用didSelectRowAtIndexPath
,可以捕获UITableViewController
中已选择的单元格。由于直接按Choose User
绕过单元格的选择,我的问题就出现了。
即使用户立即点击UITableViewController
,我怎样才能让UITableViewCell
知道Choose User
foo已被按下?
N.B。我本身并不需要选择功能,这只是通过了解用户在单元区域内进行了挖掘的方法。
答案 0 :(得分:0)
您可以直接调用该方法。如果我们为每个Choose User
按钮说明我们将行号设置为tag
并假设您没有部分,那么我们可以在0
部分中进行所有操作。< / p>
- (void)hitChooseUser:(id)sender
{
// Do whatever you want for when a user hits the `Choose User` button
// Code......
// Then do this at the end or whenever you want to do it.
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[sender tag] inSection:0];
// Also assuming you have created you have created you UITableView correctly.
[self tableView:myTableView didSelectRowAtIndexPath:indexPath];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Do whatever it is you want.
}
我还发现此链接可能会对您有所帮助Manually call didSelectRowatIndexPath
您还可以通过为userInteractionEnabled:
中的每个单元格NO
设置cellForRowAtIndexPath:
来禁用用户与单元格本身的互动,这样didSelectRowAtIndexPath:
只会在您需要时调用{{1}}手动调用它。
答案 1 :(得分:0)
请勿致电didSelectRowAtIndexPath:
这是UITableViewDelegate
方法,并且应尽可能使用(意味着让UITableView
向其发送消息)。此外,它还会对UITableView
实施产生不必要的依赖。
话虽如此,为了实现在按钮点击或行选择上执行的共享行为,将其重构为一个未与UITableViewDelegate
例如:
-(void)doSomethingCommon {
//do shared code here
}
-(void)chooseUserButtonPressed:(id)sender {
[self doSomethingCommon];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self doSomethingCommon];
}
如果您的UITableView
显示多个这些行,您依赖于知道哪个对应的模型对象与该单元格相关,那么您可以使用{{1}上的tag
属性子类(通常是单元格中的某些东西)来标记对象的显示行。