【问题标题】:TouchesBegan recognised in next view controllerTouchesBegan 在下一个视图控制器中被识别
【发布时间】:2017-02-25 19:09:20
【问题描述】:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    UITouch *aTouch = [touches anyObject];

    NSLog(@"touch recognised");

    CGPoint location = [aTouch locationInView:_mainView];

    __block NSString *option = [[NSString alloc] init];
    __block NSString *type = [[NSString alloc] init];

    for (Selectors *tempView in _mainView.subviews) {
        if (CGRectContainsPoint(tempView.frame, location)) {
            NSLog(@"%@ : %@", tempView.option, tempView.type);

            option = tempView.option;
            type = tempView.type;

            break;
        }
    }


    [self moveToNextWeldCustomViewWithOption:option andType:type];


}

在我之前的 UIVIewController 中——那么我们在这里展示下一个 UIViewController

-(void)moveToNextWeldCustomViewWithOption:(NSString *)option andType:(NSString *)type {

    WeldDesignViewController *lobby = [self.storyboard instantiateViewControllerWithIdentifier:@"WeldDesignViewController"];

    lobby.option = option;
    lobby.type = type;

    [self presentViewController:lobby animated:NO completion:nil];

}

在下一个 UIViewController 中,在 viewDidAppear 方法之前我什么都不做 - 但是,开始的触摸仍在下一个 viewcontroller 中被识别。

【问题讨论】:

  • 目前尚不清楚您到底在期待什么以及正在发生什么。你想在以前的视图控制器中获得这些触摸吗?你不是想要它们而是得到它们吗?
  • @ChrisTrahey 简而言之,下一个视图控制器正在记录前一个视图控制器中的触摸。
  • 那么,2 号视图控制器不再出现在屏幕上,但正在触摸吗?这两个视图控制器是同一个类吗?

标签: ios objective-c uiviewcontroller presentviewcontroller


【解决方案1】:

我认为问题在于,您称为“大厅”的 VC 在您展示它之后正在被释放。这在响应者链中将其排除在外。将该引用移动为呈现视图控制器的属性:

@property (nonatomic, strong) WeldDesignViewController* lobby;
// ...
-(void)moveToNextWeldCustomViewWithOption:(NSString *)option andType:(NSString *)type {

   self.lobby = [self.storyboard instantiateViewControllerWithIdentifier:@"WeldDesignViewController"];

    lobby.option = option;
    lobby.type = type;

    [self presentViewController:self.lobby animated:NO completion:nil];

}

您可能还需要在提供的 VC 中实现 touchesBagan,因为它可能会跟随响应者链到达前一个控制器。

【讨论】:

  • 不幸的是,阅读后我希望它会这么简单,我错过了一个非常愚蠢的错误。但是,我仍然可以在下一个视图控制器中触摸上一个视图控制器的视图。
  • 本质上,我可以单击与以前视图相同的位置,它们仍会从以前的视图控制器中开始的触摸记录下来。
  • 天哪,最后一行日志说明了很多!看起来问题是“上游”,您的 TypeOfWeldViewController 的视图不在窗口层次结构中......这是如何呈现的?
  • 您可以尝试在整个应用程序中实施我的答案中的建议并报告吗?您必须保留对呈现的视图控制器的强引用,这些视图控制器在它们呈现的范围内仍然存在。仅此一项就会导致各种问题。
  • 更新答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
相关资源
最近更新 更多