未在UI表中选择正确的对象查看单元格

时间:2014-09-05 10:56:46

标签: ios uitableview parse-platform

当按下单元格选择了正确对象的发送按钮时,我在表格视图中显示了一个用户数组。它可以随意退出:)。如何发送所选单元格上显示的对象?

这是我发送信息的方式

- (void)sendMessage:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        PFObject *object = [self.objects objectAtIndex:indexPath.row];
        self.SendToUsername = [object objectForKey:@"username"];     
        self.SendToName = [object objectForKey:@"name"];
}

这是我的单元格,发送按钮位于此处。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
{
    static NSString *simpleTableIdentifier = @"LampCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    UIButton *sendbutton = (UIButton*) [cell viewWithTag:105];
    [sendbutton addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}

enter image description here

3 个答案:

答案 0 :(得分:0)

这很容易。 Tableview本身提供了方法。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

     variable=[array objectAtIndex:indexPath.row];
}

In" Variable"你有选择的价值。如果您的阵列可以在整个控制器中访问,那么您可以保存" indexPath.row"并使用发送按钮的点击事件来获取所选记录。

答案 1 :(得分:0)

tableView indexPathForSelectedCell不会为您提供单元格中按钮的操作方法所期望的索引路径。单元格未被选中 - 您触摸了按钮。

要获取该按钮的行的索引路径,有几种不同的方法。

我首选的方法是遍历视图层次结构以查找包含该按钮的单元格,并使用它来获取索引路径。有关详细信息,请参阅此问题:

Button in custom cell in dynamic table: how to know which row in action method?

我对这个问题的回答如下。您可以将这两种方法添加到UITableViewController上的类别中,或者如果您愿意,也可以将它们添加到视图控制器中。

- (NSIndexPath *)indexPathForCellSubview:(UIView *)subview
{
    if (subview) {
        UITableViewCell *cell = [self tableViewCellForCellSubview:subview];
        return [self.tableView indexPathForCell:cell];
    }
    return nil;
}

- (UITableViewCell *)tableViewCellForCellSubview:(UIView *)subview
{
    if (subview) {
        UIView *superView = subview.superview;
        while (true) {
            if (superView) {
                if ([superView isKindOfClass:[UITableViewCell class]]) {
                    return (UITableViewCell *)superView;
                }
                superView = [superView superview];
            } else {
                return nil;
            }
        }
    } else {
        return nil;
    }
}

然后您可以在按钮操作方法中获取索引路径,如下所示:

NSIndexPath *indexPath = [self indexPathForCellSubview:sender];

答案 2 :(得分:0)

您不需要为按钮设置标记以获取索引路径。您只需使用以下代码即可获得它:

- (void)sendMessage:(id)sender {
    UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *clickedButtonIndexPath = [self.tableView indexPathForCell:clickedCell];
        PFObject *object = [self.objects objectAtIndex:indexPath.row];
        self.SendToUsername = [object objectForKey:@"username"];     
        self.SendToName = [object objectForKey:@"name"];
}