UITapGestureRecognizer在UITableViewCell中没有标签

时间:2013-04-30 12:14:56

标签: ios uitableview uigesturerecognizer uitapgesturerecognizer

我有一个小问题。

我实现了像

这样的UIableView
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell;

    UILabel *label = nil;

    cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

        UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
        [cell addGestureRecognizer:longPress];

        label = [[UILabel alloc] initWithFrame:CGRectZero];
        [label setLineBreakMode:UILineBreakModeWordWrap];
        [label setMinimumFontSize:self.FONT_SIZE];
        [label setNumberOfLines:0];
        [label setFont:[UIFont systemFontOfSize:self.FONT_SIZE]];
        [label setTag:1];
        [label setBackgroundColor:[UIColor clearColor]];
        [label setTextColor:[colors getMainTextColor]];

        UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(changeCellHeight:)];
        [label addGestureRecognizer:tap];

        [[cell contentView] addSubview:label];

这将UITapGestureRecognizer设置为Label并且它可以工作,但它总是点击第一个单元格。

方法changeCellHeight总是告诉我indexPath.row = 1,我不知道为什么。

-(void)changeCellHeight:(id)sender{
    UITableViewCell *cell = (UITableViewCell *)[sender view];
    NSIndexPath *IndexPath = [self.table indexPathForCell:cell];
    DataObject * obj_ = [self.allData objectAtIndex:IndexPath.row];
    if (obj_.canChangeHeight) {
        obj_.needChangeHeight = !obj_.needChangeHeight;
        [self.table reloadData];
    }
}

我故意把addGestureRecognizer放进去:if if(cell == nil),因为我不想放弃内存。

1 个答案:

答案 0 :(得分:1)

[sender view]不是表格查看单元格。它是一个标签。你很幸运(或者不幸的是取决于你如何看待它)你不会崩溃。

您需要从标签导航到单元格(superview的超级视图),然后使用它。