gpt4 book ai didi

iphone - uitableview 单元格中的手势错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:43 26 4
gpt4 key购买 nike

我在 UITableViewCell 中的 GestureRecognizer 有问题,我有左右滑动手势,按住 2 秒并在 tableview 单元格中捏合手势,滑动- 下一章向右滑动,上一章向左滑动,捏合重定向到另一个 View Controller ,并按住 2 秒弹出窗口显示( subview )。所有这些都在一个名为表的 TableView 中实现。我的问题是一切正常,但在表格 View 中使用 Gesture 一段时间后,它卡住 swipeGesture 可能是捏也不起作用。但是当我转到另一个页面并返回时,它开始正常工作。一段时间后它也会卡住。我的代码是如何解决这个问题的?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

readCell *cell = (readCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
swipeGesture.direction = UISwipeGestureRecognizerDirectionRight; // or whatever
[table addGestureRecognizer:swipeGesture];
[swipeGesture release];

UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 1.0; //seconds
lpgr.delegate = self;
[table addGestureRecognizer:lpgr];
[lpgr release];

UISwipeGestureRecognizer *swipeGestureleft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGestureleft:)];
swipeGestureleft.direction = UISwipeGestureRecognizerDirectionLeft; // or whatever
[table addGestureRecognizer:swipeGestureleft];
[swipeGestureleft release];

UIPinchGestureRecognizer *longPressRecognizer =
[[UIPinchGestureRecognizer alloc]
initWithTarget:self
action:@selector(longPressDetected:)];
[self.view addGestureRecognizer:longPressRecognizer];
[longPressRecognizer release];

-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
CGPoint p = [gestureRecognizer locationInView:table];

NSIndexPath *indexPath = [table indexPathForRowAtPoint:p];
if (indexPath == nil)
NSLog(@"long press on table view but not on a row");
else

// localStringValueverseno= [tableView cellForRowAtIndexPath:indexPath];
localStringValueverseno = [(UILabel *)[[table cellForRowAtIndexPath:indexPath]
viewWithTag:1] text];
localStringValue = [table cellForRowAtIndexPath:indexPath].textLabel.text;
_lblmainnotegns.text = localStringValueverseno;
// localStringValueverseno= [tableView cellForRowAtIndexPath:indexPath].cell.table.chapterAndVerse.text;
delegate.selectedIndex=[NSString stringWithFormat:@"%d",indexPath.row+1];
[userInfo setObject:[delegate.allSelectedVerseEnglish objectAtIndex:indexPath.row] forKey:@"text"];
[userInfo setObject:delegate.selectedBook forKey:@"book"];
[userInfo setObject:delegate.selectedChapter forKey:@"chapter"];
[userInfo setObject:[NSString stringWithFormat:@"%d",indexPath.row + 1] forKey:@"verse"];

UIView *noteView = (UIView *)[self.view viewWithTag:101];
//ViewWithTag Number should be same as used while allocating
[noteView removeFromSuperview];
//For removing View
UIView *acntView = (UIView *)[self.view viewWithTag:100];
//ViewWithTag Number should be same as used while allocating
[acntView removeFromSuperview];
// now you can use cell.textLabel.text
UIView *noteViewsync = (UIView *)[self.view viewWithTag:105];
//ViewWithTag Number should be same as used while allocating
[noteViewsync removeFromSuperview];


if ([notes objectForKey:[NSString stringWithFormat:@"%@ %@:%@",delegate.selectedBook,delegate.selectedChapter,delegate.selectedIndex]] == nil) {
[notetickimage setHidden:YES];
[self.view addSubview:MainPopupView];
}
if (gestureRecognizer.state==UIGestureRecognizerStateBegan ) {
self.table.scrollEnabled = NO;
[table removeGestureRecognizer:gestureRecognizer];
}
else if(gestureRecognizer.state==UIGestureRecognizerStateEnded) {
self.table.scrollEnabled = YES;
[table removeGestureRecognizer:gestureRecognizer];
}



NSLog(@"long press on table view at row %d", indexPath.row);
}
-(void) handleSwipeGesture:(UISwipeGestureRecognizer*)recognizer {


if(![delegate.selectedChapter isEqualToString:[NSString stringWithFormat:@"%d",[DbHandler mNumberOfChaptersInBook:delegate.selectedBook]]]) {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationDelay:0.0];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDidStopSelector:@selector(animCompleteHandler:finished:context:)];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
[UIView commitAnimations];

// if the currentChapter is the last then do nothing
delegate.selectedChapter = [NSString stringWithFormat:@"%d",[delegate.selectedChapter intValue] + 1];
[delegate reloadVerses];
[self resetReadViewToVerse:1];
[table removeGestureRecognizer:recognizer];
}
if (recognizer.state==UIGestureRecognizerStateBegan ) {
self.table.scrollEnabled = NO;
[table removeGestureRecognizer:recognizer];
}
else if(recognizer.state==UIGestureRecognizerStateEnded) {
self.table.scrollEnabled = YES;
[table removeGestureRecognizer:recognizer];
}


return;



}
-(void) handleSwipeGestureleft:(UISwipeGestureRecognizer*)recognizer {

if(![delegate.selectedChapter isEqualToString:@"1"])
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationDelay:0.0];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDidStopSelector:@selector(animCompleteHandler:finished:context:)];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[UIView commitAnimations];
delegate.selectedChapter = [NSString stringWithFormat:@"%d",[delegate.selectedChapter intValue] - 1];
[delegate reloadVerses];
[self resetReadViewToVerse:1];
[table removeGestureRecognizer:recognizer];
}
if (recognizer.state==UIGestureRecognizerStateBegan ) {
self.table.scrollEnabled = NO;
[table removeGestureRecognizer:recognizer];
}
else if(recognizer.state==UIGestureRecognizerStateEnded) {
self.table.scrollEnabled = YES;
[table removeGestureRecognizer:recognizer];
}

return;


}
-(void) longPressDetected:(UIPinchGestureRecognizer*)recognizer {


self.table.scrollEnabled = NO;
SearchViewController *aSecondViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
aSecondViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:aSecondViewController animated:YES];

/*[self.navigationController pushViewController:aSecondViewController animated:YES];*/

[aSecondViewController release];
[UIView commitAnimations];
[table removeGestureRecognizer:recognizer];

UIView *noteView = (UIView *)[self.view viewWithTag:101];
//ViewWithTag Number should be same as used while allocating
[noteView removeFromSuperview];
UIView *setngView = (UIView *)[self.view viewWithTag:102];
//ViewWithTag Number should be same as used while allocating
[setngView removeFromSuperview];
UIView *acntView = (UIView *)[self.view viewWithTag:100];
//ViewWithTag Number should be same as used while allocating
[acntView removeFromSuperview];
UIView *popView = (UIView *)[self.view viewWithTag:106];
//ViewWithTag Number should be same as used while allocating
[popView removeFromSuperview];

}

而且当我们向左或向右滑动时, Action 也很慢。请帮助我。

最佳答案

每次调用例程 tableView:cellForRowAtIndexPath: 时添加一个识别器,并在处理手势后删除一个。因此在移除所有识别器(它们的数量等于单元格的数量)之后,手势将不会被识别。

也许您不应该在处理例程中删除识别器?

关于iphone - uitableview 单元格中的手势错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com