UIButton索引路径在UITableView中返回错误的路径

bir*_*age 1 xcode objective-c ios

我试图在正确填充的UITableView中到达按钮索引路径.我在另一个XIB中定制的每个单元格中都有两个标签和一个按钮.当我单击任何部分中任何行的按钮时,它返回错误的索引路径.我想知道是什么原因引起的.您可以在下面找到我的代码.

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

    ProgramCell *cell = (ProgramCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ProgramCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    [cell.contentView setUserInteractionEnabled: NO]; //


    NSString* strTemp = [NSString stringWithFormat: @"%d/%d", indexPath.section, indexPath.row ];

    for (int i = 0; i < buttonClickedArray.count; i++) {

        if([[buttonClickedArray objectAtIndex:i] isEqualToString:strTemp])
        {
            [cell.btnHatirlat setBackgroundColor:[UIColor colorWithRed:0.0 green:0.5 blue:0. alpha:0.7]];
            [cell.btnHatirlat setTitle:@"Eklendi" forState:UIControlStateNormal];
        }
    }

    NSString *str = @"";
    str = [arrayPazartesi objectAtIndex:indexPath.row];


    if ([str length] > 1)
    {
        NSString *strSaat = [str substringToIndex:5];
        NSString *strEtkinlikAdi = [str substringFromIndex:6];
        cell.lblEtkinlik.text = strEtkinlikAdi;
        cell.lblSaat.text = strSaat;
        [cell.btnHatirlat addTarget:self action:@selector(hatirlat:)
                   forControlEvents:UIControlEventTouchUpInside ];
    }

    return cell;
}

- (void) hatirlat:(UIButton *)sender
{      
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableProgram];
    NSIndexPath *indexPath = [self.tableProgram indexPathForRowAtPoint:buttonPosition];
    int j = indexPath.section; //true section
    int i = indexPath.row; //wrong row
}
Run Code Online (Sandbox Code Playgroud)

rde*_*mar 6

我以前见过这个问题(但是找不到参考),修复就是不选择按钮的一角(我认为如果按钮位于单元格的顶部,这只会是一个问题) .代替,

CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableProgram];
Run Code Online (Sandbox Code Playgroud)

试试这个,以确保你不是正确的,

CGPoint boundsCenter = CGRectOffset(sender.bounds, sender.frame.size.width/2, sender.frame.size.height/2).origin;
CGPoint buttonPosition = [sender convertPoint:boundsCenter toView:self.tableView];
Run Code Online (Sandbox Code Playgroud)