在选项卡式视图应用程序中滑动手势

Posted

技术标签:

【中文标题】在选项卡式视图应用程序中滑动手势【英文标题】:Swipe Gesture in Tabbed View App 【发布时间】:2012-07-12 19:10:08 【问题描述】:

所以这非常非常奇怪。我已将右舷的滑动手势识别器添加到 6 选项卡选项卡栏中的第一个选项卡的视图中。我将其设置为向左方向并将其作为 Action 连接到 firstTabViewController.h。而且效果很好。

现在,如果我尝试以相同的方式将“正确方向”滑动手势识别器添加到第一个选项卡,则该操作甚至不会注册。

另外,如果我尝试在另一个选项卡(不是索引 0 的选项卡)中执行相同的操作,或者将工作选项卡移动到选项卡栏中的不同位置,应用程序会因访问错误而崩溃当我滑动时。

firstTabViewController.h

- (IBAction)swipeLeft:(id)sender;   // Works fine
- (IBAction)swipeRight:(id)sender;  // Doesn't even register

firstTabViewController.m

- (IBAction)swipeLeft:(id)sender 
    int nextIndex = CURRENT_INDEX + 1;  // I did modify this accordingly when the tab was moved

    [self.tabBarController setSelectedIndex:nextIndex];
    NSLog(@"Swipe left");



- (IBAction)swipeRight:(id)sender 
    NSLog(@"Swiped Right");

【问题讨论】:

能否请您发布初始化滑动手势对象的代码? 也许这就是我所缺少的,我不知道那会是什么样子。我所做的只是将“滑动手势识别器”项目拖放到带有情节提要的视图上。然后我控制拖拽 IBAction 连接从那个图标到我的 viewController.h 请确保您在视图中添加了两个滑动手势识别器对象。分别指定了手势的左右方向。并正确连接了 IBActions... 显然这就是我所缺少的。我曾假设故事板/Ctrl-拖动连接会初始化我需要的东西,但看起来像是另一个过度依赖技术的例子。谢谢 【参考方案1】:

刚刚测试过,它可以工作:

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeft:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];
swipeLeft.delegate = self;
[swipeLeft release];

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRight:)];
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRight];
swipeRight.delegate = self;
[swipeRight release];

-(void) swipeRight:(UISwipeGestureRecognizer *) recognizer 
    if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)
        NSLog(@"swipe right");


-(void) swipeLeft:(UISwipeGestureRecognizer *) recognizer 
    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)
        NSLog(@"swipe left");


【讨论】:

你把 *swipeLeft 和 *swipe Right 放在哪里了?在 IBAction、ViewDidLoad 还是其他地方? viewDidLoad -- 你应该能够将该代码复制并粘贴到你的 viewDidLoad 和那些方法中,它应该可以工作 效果很好!但是,我是否应该担心以下警告:Assigning to 'id<UIGestureRecognizerDelegate>' from incompatible type 'firstViewController *' 在线 swipeLeft.delegate = self; 这是因为您的视图控制器类不符合 UIGestureRecognizerDelegate 协议。我在 Shabzco 的代码中没有看到使用任何委托协议方法的任何内容,而且我怀疑您也没有使用它们,所以您最好删除该行。 值得一提的是,您可以对两个识别器使用相同的方法(为我保留逻辑),只需检查识别器.direction

以上是关于在选项卡式视图应用程序中滑动手势的主要内容,如果未能解决你的问题,请参考以下文章

在 UIWebView 中向后/向前滑动手势?

Android Studio - 选项卡式活动如何将片段重置为默认视图?

我有一个选项卡式视图,如何触发视图运行一些代码,视图由选项卡式视图激活?

使用 swift 在选项卡式应用程序中模态显示和关闭视图

HTML 选项卡式表单滑动

在选项卡式应用程序的导航视图中为表格添加背景图像