UISwipeGestureRecognizer addGestureRecognizer可在子视图错误中查看

时间:2013-06-18 02:37:21

标签: ios objective-c uiswipegesturerecognizer

几年后,我再次尝试使用XCode为iOS编写一些小应用程序。

我的MainViewController在viewdidload中包含这些行:

UIStoryboard* overviewStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *overviewController = [overviewStoryboard instantiateViewControllerWithIdentifier:@"Overview"];

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:overviewController];

...

[self addChildViewController:nav];
[self.view addSubview:nav.view];
[nav didMoveToParentViewController:self];

概述后面的Controller包含了视图中的整个手势识别加载:

属性

@property (nonatomic, strong) UISwipeGestureRecognizer *swipeGestureUpDown;

viewDidLoad中:

self.tableView.dataSource = self;
self.tableView.delegate = self;

// gesture recognizer top
self.swipeGestureUpDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedScreen)];
self.swipeGestureUpDown.numberOfTouchesRequired = 1;
self.swipeGestureUpDown.direction = (UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown);

[self.view addGestureRecognizer:self.swipeGestureUpDown];

和swipedScreen只有一个nslog:

- (void)swipedScreen:(UISwipeGestureRecognizer*)gesture
{
    NSLog(@"somewhere");
}

overviewcontroller包含一个带有自定义单元格的tableView。 maincontroller将此overviewcontroller作为rootcontroller传递给导航,如果你swipeUp则应该是slideUp,如果你swipeDown则应该是slideIn。正如您在上面看到的那样,maincontroller正在使用rootcontroller调用navigationcontroller。

没有任何反应,没有识别出任何手势,并且在某些尝试中它会因此消息而崩溃

unrecognized selector sent to instance

现在有人做了什么?

1 个答案:

答案 0 :(得分:0)

回答评论中提出的问题。只是在这里巩固它。 有一些问题 的第一

self.swipeGestureUpDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedScreen)];

@selector(swipedScreen)swipedScreen结尾处缺少,这使其无法识别,因为该函数的定义为- (void)swipedScreen:(UISwipeGestureRecognizer*)gesture

第二

self.swipeGestureUpDown.direction = (UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown);

对于两个滑动方向具有单个手势识别器不起作用。有关详细信息,请参阅this。您需要为每个方向配备专用的手势识别器。

第三

最重要的是尝试在UITableView上添加向上和向下方向滑动,只要在UITableView中启用滚动功能就行不通,因为它有自己的默认操作来处理这些滑动这可以防止手动处理。
但是如果表格中的内容非常有限且不需要滚动,您可以将scrollEnabled设置为false,这将UITableView停止使用手势并将响应者链上方的手势转发。请参阅scrollEnabled说明here。 (UITableView继承自UIScrollView。)