TouchesBegan 在下一个视图控制器中被识别
Posted
技术标签:
【中文标题】TouchesBegan 在下一个视图控制器中被识别【英文标题】:TouchesBegan recognised in next view controller 【发布时间】: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 号视图控制器不再出现在屏幕上,但正在触摸吗?这两个视图控制器是同一个类吗? 【参考方案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 的视图不在窗口层次结构中......这是如何呈现的? 您可以尝试在整个应用程序中实施我的答案中的建议并报告吗?您必须保留对呈现的视图控制器的强引用,这些视图控制器在它们呈现的范围内仍然存在。仅此一项就会导致各种问题。 更新答案!以上是关于TouchesBegan 在下一个视图控制器中被识别的主要内容,如果未能解决你的问题,请参考以下文章
你如何知道在 touchesBegan 中被触摸的对象是啥?