我有一个小问题。
我实现了像
这样的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),因为我不想放弃内存。
答案 0 :(得分:1)
但[sender view]
不是表格查看单元格。它是一个标签。你很幸运(或者不幸的是取决于你如何看待它)你不会崩溃。
您需要从标签导航到单元格(superview的超级视图),然后使用它。