在我的UITableView
i' v中添加了滑动UISwipeGestureRecognizer
到单元格。因此,当我在任何单元格上滑动时,它会在该行上打开一个菜单。但是当我由于单元格可重用性而滚动表格视图时,菜单也会出现在桌子下面的其他单元格上。但是我只想在显示的菜单上显示菜单用户。
这是我的代码 -
-(StoreCell *)configureCellForIndexPath:(NSIndexPath *)indexPath table:(UITableView *)tablev{
UITableViewCell* cell;
static NSString *CellIdentifier = @"StoreCell";
cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
StoreCell* stCell = (StoreCell *)cell;
stCell.delegate = self;
//configure my cell here
UISwipeGestureRecognizer* gestureR = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
[gestureR setDirection:UISwipeGestureRecognizerDirectionRight];
[stCell addGestureRecognizer:gestureR];
UISwipeGestureRecognizer* gestureL = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSwipeFrom:)];
[gestureL setDirection:UISwipeGestureRecognizerDirectionLeft];
[stCell addGestureRecognizer:gestureL];
return stCell;
}
那么如何实现所需的行为,以便菜单只出现在一行而不是重用的单元格上。
任何帮助或建议都将不胜感激。
答案 0 :(得分:1)
你应该在一个变量中保存被刷过的单元格。在你做了类似的事情之后:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row = self.swipedRow){
static NSString *CellIdentifier = @"CellSwiped";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier]
autorelease];
cell.textLabel.text=[Array objectAtIndex:indexPath.row];
return cell;
}else{
static NSString *CellIdentifier = @"CellNotSwiped";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier]
autorelease];
cell.textLabel.text=[Array objectAtIndex:indexPath.row];
return cell;
}
我没有测试代码,但我认为你可以理解这个想法;)我希望我能帮忙
答案 1 :(得分:0)
- (StoreCell *)configureCellForIndexPath:(NSIndexPath *)indexPath table:(UITableView *)tablev {
UITableViewCell* cell;
static NSString *CellIdentifier = @"StoreCell";
if(indexPath.row == 1){
/* ---- Your Code --- */
return stCell;
}
else{
/* ---- Your Code --- */
[stCell setGestureRecognizers:nil];
return stCell;
}}