为什么未在主屏幕中加载的ScrollView元素不可点击

时间:2019-01-22 17:09:14

标签: ios objective-c uiscrollview uistackview didselectrowatindexpath

我的体系结构如下:CollectionView(我有6个集合,所以我有6个视图来包含它们)在View里面的StackView内部(包含所有视图) ScrollView。这一切都在IBuilder内部完成,每个VIEW都有.xib文件。然后是另一个.xib文件,用于所有视图的堆栈。然后是该滚动视图所在的应用程序的另一个.xib文件。所有这些都会加载并呈现正确的信息。

我的问题是每个cell中的每个collectionView必须是可点击的。只有开头开头的views可以点击。一次,我需要滚动到一个视图。我无法单击那些新渲染的视图。

对于正在运行的集合视图有效的是

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

  NSInteger index = indexPath.section * 2 + indexPath.row;
  HGMeasurementValue *cellData = [self.cells objectAtIndex:index];
  if (cellData.isEnable) {
    [[NSNotificationCenter defaultCenter] postNotificationName:HGEventMeasurementCellCallback object:self userInfo:@{ @"cellData": cellData}];
  }
}

我尝试过:

  • 在调试器中,即使在来回滚动后,第一次加载时也不会出现在屏幕上的视图不会被调用didSelectItemAtIndexPath。唯一能够响应触摸的是第一个可见的触摸。

-在iPhoneSE上进行了测试-首先加载了2个视图,并且可以点击(其他4个视图均未响应didSelectItemAtIndexPath

-已在iPhone XR上进行了测试-首先加载了3个视图并且可以点击(其他3个视图均未响应didSelectItemAtIndexPath

- (void)ViewDidLoad {
  self.collection.delaysContentTouches = NO;
  self.collection.canCancelContentTouches = NO;
  self.collection.delegate = self;
}

- (void)shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  return YES;
}

-禁用gestureRecognizer的scrollView(无法正常工作,我无法再滚动)

  • 我检查了是否有其他多余的手势识别器可能会吞噬我的手机,而我却找不到。

  • 我在SO上看到了此选项,并尝试实现它,但是以前没有任何手势可以将其应用于:

    tapGesture.cancelsTouchesInView = NO;
    
  • 检查了苹果文档中的UIStackViewUIGestureRecognizerUIScrollView,但我仍然找不到my views that are not visible when the app loads are not responding to touches的原因。

我缺少任何辅助方法/委托设置吗? 您知道为什么scroll stackcollectionView不可点击的任何原因,因为必须在viewDidLoadviewDidLayoutSubViews之后加载(因为仅尚不可见但无法响应触摸的视图。)

任何帮助将不胜感激!

非常感谢您!

0 个答案:

没有答案