Ios 未在UI表视图单元格中选择正确的对象

Ios 未在UI表视图单元格中选择正确的对象,ios,uitableview,parse-platform,Ios,Uitableview,Parse Platform,当按下“发送”按钮时,表格视图中显示了一个用户数组,该单元格没有选择正确的对象。可以随机退出:)。如何使选定单元格上显示的对象发送 这就是我发送信息的方式 - (void)sendMessage:(id)sender { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; PFObject *object = [self.objects objectAtIndex:indexPath.row

当按下“发送”按钮时,表格视图中显示了一个用户数组,该单元格没有选择正确的对象。可以随机退出:)。如何使选定单元格上显示的对象发送

这就是我发送信息的方式

- (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;
}

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

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

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

在“变量”中,您有选择的值。如果可以在整个控制器中访问数组,则可以保存“indexPath.row”并使用发送按钮的单击事件来获取所选记录。

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

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

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

我对这个问题的回答如下。您可以将这两个方法添加到
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];

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

- (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"];
}

显示你的CellforRowatindexpath你在哪里做这件事?@JayGajjar我现在编辑我的问题!Thanks@JoeFryer我现在编辑我的问题!谢谢我更新了我的问题,你们可以看到我在我的手机里使用了一个按钮。有必要添加按钮吗?若您并没有使用该按钮,那个么在选择行时,它将调用方法,您可以在其中写入发送消息代码,甚至可以在选择表单元格行时调用发送消息方法。-(void)tableView:(UITableView*)tableView DidSelectRowatineXpath:(NSIndexPath*)indexPath{variable=[array objectAtIndex:indexPath.row];//这里调用方法你想要什么}谢谢,我现在用图片更新了我的问题。也许我想做什么更容易理解?再次感谢汉克斯。嗯,还是不行。在动态表视图中,所有内容都位于同一单元格中。查看更新问题中的图像。这是一个名为“图像上的按钮”的按钮,它需要工作。非常感谢,但还没有工作。问题可能是按钮在图像旁边吗?另一种解决方案是使用具有不同单元格的静态表视图,还是在最后滚动到下一个用户时也会出现问题?我用一张图片更新了我的问题,这样也许会有帮助?