在没有didSelectRowAtIndexPath的情况下按下捕获单元格

时间:2013-12-12 13:12:39

标签: ios iphone objective-c uitableview

我有以下UITableViewCell(好的,子类)。

enter image description here

使用didSelectRowAtIndexPath,可以捕获UITableViewController中已选择的单元格。由于直接按Choose User绕过单元格的选择,我的问题就出现了。

即使用户立即点击UITableViewController,我怎样才能让UITableViewCell知道Choose User foo已被按下?

N.B。我本身并不需要选择功能,这只是通过了解用户在单元区域内进行了挖掘的方法。

2 个答案:

答案 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属性子类(通常是单元格中的某些东西)来标记对象的显示行。