2014-11-21 122 views
4

我在UIScrollView中有一个不可滚动的UITableView。而且我遇到的问题是,当我触摸某一行时,在第一次敲击时没有调用回调didSelectRowAtIndexPath:,但是在第一次敲击一生之后工作。UITableView(在UIScrollView内)didSelectRowAtIndexPath:不在第一个水龙头上调用

几个方面的考虑:

  • 第一次轻触后,表视图正常工作,每一个水龙头在每一个细胞的工作原理。
  • 这发生在我滚动UIScrollView之后。如果我不滚动UIScrollView,这绝不会发生。
  • 我已经覆盖了UIScrollView的touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view并且事件确实通过抛出,viewUITableViewCellContentView有效。

我只是不知道为什么事件没有被发送到UITableView在第一次,并在它下面的那些。

+2

双重检查,以确保您不使用 - 的tableView:didDeselectRowAtIndexPath:不是didSelectRowAtIndexPath方法 – Vig 2014-11-21 19:46:45

+0

@Vig是啊,第一个后点击我的执行didSelectRowAtIndexPath方法是被调用。 – 6rod9 2014-11-21 19:49:52

+0

为什么您首先在滚动视图中嵌入不可滚动的表格视图? – sha 2014-11-22 00:31:19

回答

1

如果你有UIScrollView包含垂直内容和UITableView作为该内容的一部分,你必须至少禁用滚动上UITableView - 否则它是用户困惑的时候,他会滚动你的mainViewtableView,也混淆了框架,因为不清楚在哪里发送平移手势。作为一个经验法则 - 你应该避免在scrollViews之内放置表格视图,除非你真的知道你在做什么。

+1

表格视图上的滚动被禁用。 :/ – 6rod9 2014-11-25 17:58:54

+0

究竟是如何“有效”被禁用? – sha 2014-11-25 18:04:24

+0

我禁用了故事板UITableView复选框“滚动已启用”中的滚动。 我的猜测是,滚动视图仍然认为第一个水龙头是以前的滚动事件的一部分,但仍然不知道为什么。 – 6rod9 2014-11-25 18:10:29

0

请禁用您的表格视图的滚动,并检查数据源和代表连接到您的表格视图。如果不按下面的代码

@interface myClass()<UITableViewDataSource, UITableViewDelegate> 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.myTableView.scrollEnabled = NO; 
    self.myTableView.delegate = self; 
    self.myTableView.dataSource = self; 
}