UITableViewController didSelectRowAtIndexPath:(NSIndexPath *)indexPath

时间:2011-11-27 02:26:34

标签: iphone ios cocoa-touch ipad

如何引用在didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法中单击的单元格对象?

我有一个UISplitViewController,在MasterView中我有一个表,其中cell.tag =来自sqlite数据库的主键(即表从db填充)。我能够在上面的方法中捕获click事件,但是我无法看到如何传递单元对象,或者我怎么能引用它来获取cell.tag。最终,目标是通过Master / Detail委托将该id传递给详细视图,然后根据Master中的id将数据加载到DetailView中。

任何提示都表示赞赏!

编辑:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    cell.textLabel.text = NSLocalizedString(@"Detail", @"Detail");
    Entry *entry = [self.entries objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:[NSString stringWithFormat:@"%@",entry.title]];
    cell.tag = entry.entryID;
    return cell;
}

4 个答案:

答案 0 :(得分:4)

didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
}

请注意,询问表cellForRowAtIndexPath:是否返回一个单元格,而要求控制器tableView:cellForRowAtIndexPath:运行委托方法。

答案 1 :(得分:4)

因为您已经有一系列条目,所以您也可以写如下。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    Entry *entry = [self.entries objectAtIndex:[indexPath row]];
}

我认为这比cellForRowAtIndexPath更受欢迎:因为

  • 您可以获取整个条目对象,而不仅仅是ID。
  • 您可以使用非整数ID,例如字符串。
  • 你不依赖于桌子或牢房(脱钩)。

答案 2 :(得分:2)

您可以使用方法cellForRowAtIndexPath从NSIndexPath获取UITableViewCell。

答案 3 :(得分:0)

你可以通过在NSMutableArray中保存所有id然后通过这个方法在另一个类中传入它。

classInstanceName.IntVariableName=[[taskIdArray objectAtIndex:indexPath.row]intValue]