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

Iphone 在选项卡式视图应用程序中滑动手势,iphone,objective-c,ios,Iphone,Objective C,Ios,所以这很奇怪。我在6个选项卡栏的第一个选项卡的视图中添加了右侧板的滑动手势识别器。我将其设置为左方向,并将其作为操作连接到firstTabViewController.h。而且它工作得很好 现在,如果我尝试以相同的方式将“正确方向”滑动手势识别器添加到第一个选项卡,则该操作甚至不会注册 此外,如果我尝试在另一个选项卡(不是索引0处的选项卡)中执行相同的操作,或者将工作选项卡移动到选项卡栏中的其他位置,则当我滑动时,应用程序会崩溃,并出现错误的访问错误 firstTabViewController

所以这很奇怪。我在6个选项卡栏的第一个选项卡的视图中添加了右侧板的滑动手势识别器。我将其设置为左方向,并将其作为操作连接到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");
}

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

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");

}

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

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");

}

你能发布初始化swipegesture对象的代码吗?也许这就是我缺少的,我不知道那会是什么样子。我所做的只是将“滑动手势识别器”项拖放到带有故事板的视图上。然后我控制将iAction连接从该图标拖到我的viewController。请确保在视图中添加了两个滑动手势识别器对象。分别指定了手势向左和向右的方向。并且正确地连接了IBActions…显然这就是我所缺少的。我曾假设故事板/Ctrl拖动连接将初始化我需要的内容,但看起来像是过度依赖技术的另一个例子。谢谢,请发布初始化swipegesture对象的代码?也许这就是我缺少的,我不知道那会是什么样子。我所做的只是将“滑动手势识别器”项拖放到带有故事板的视图上。然后我控制将iAction连接从该图标拖到我的viewController。请确保在视图中添加了两个滑动手势识别器对象。分别指定了手势向左和向右的方向。并且正确地连接了IBActions…显然这就是我所缺少的。我曾假设故事板/Ctrl拖动连接将初始化我需要的内容,但看起来像是过度依赖技术的另一个例子。谢谢你把左扫和右扫放在哪里了?在iAction、ViewDidLoad或其他地方?ViewDidLoad中--您应该能够将代码复制并粘贴到ViewDidLoad和那些方法中,而且应该工作得很好!但是,我是否应该关注以下警告:
swipeLeft.delegate=self行上从不兼容的类型“firstViewController*”分配给“id”这是因为您的视图控制器类不符合UIgestureRecognitizerDelegate协议。我在Shabzco的代码中没有看到任何使用委托协议方法的东西,我怀疑您也没有使用它们,所以您最好删除这一行。值得注意的是,您可以对两个识别器使用相同的方法(为我保留逻辑),然后检查识别器。方向你把*左扫和*右扫放在哪里了?在iAction、ViewDidLoad或其他地方?ViewDidLoad中--您应该能够将代码复制并粘贴到ViewDidLoad和那些方法中,而且应该工作得很好!但是,我是否应该关注以下警告:
swipeLeft.delegate=self行上从不兼容的类型“firstViewController*”分配给“id”这是因为您的视图控制器类不符合UIgestureRecognitizerDelegate协议。我在Shabzco的代码中没有看到任何使用委托协议方法的东西,我怀疑您也没有使用它们,所以您最好删除这一行。值得注意的是,您可以对两个识别器使用相同的方法(为我保留逻辑),只需检查recognizer.direction