2012-09-11 19 views
3

我有一个名为SubViewController.h的小型320x144视图控制器,其中有一个UITableView,其中包含3个单元格的单元格。我已经使tableView不可滚动,并且还通过CALayer的优雅将一些阴影效果放在tableView后面。在使用UIPanGestureRecognizer拖动后,必须点击两次以选择UITableViewCell

在另一个名为MainViewController.m的视图控制器中,我添加了SubViewController.h作为子视图MainViewController。使用UIPanGestureRecognizer我已经成功地能够拖动SubViewContoller任何地方我想要的。

我使这个子视图可见与UIBarButtonItem。在子视图的tableView中选择一个单元格后,我使用某些动画从主视图中消失。

一切工作正常。

但是,当我拖动子视图,然后尝试选择一个单元我必须点击两次单元格。在第一次点击时,除了单元格变为蓝色之外,没有任何实际发生(就像在桌面视图中选择单元格时正常发生的那样),但不会隐藏。如果我再次点击,则会隐藏。

没有拖动子视图,我可以选择一个单一的触摸单元格,也视图隐藏。

我已经编写了子视图的didSelectRowAtIndexPath:方法隐藏子视图的代码。并且我已经检查过这种方法,当我第一次选择拖动子视图后不会调用这个方法。在第二次敲击或触摸它时会被调用。再次,如果用户再次移动子视图,则会出现同样的问题。

当然,子视图的某些属性在拖动后发生了变化,我无法弄清楚。

回答

0
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 

    NSUInteger tapCount = [touch tapCount]; 

    switch (tapCount) { 
     case 1: 
      [self performSelector:@selector(singleTapMethod) withObject:nil afterDelay:.4]; 
      break; 
     case 2: 
      [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTapMethod) object:nil]; 
      [self performSelector:@selector(doubleTapMethod) withObject:nil afterDelay:.4]; 
      break; 
. . . 
} 
+0

这不是什么我期望。我相信我必须在UIGestureRecocgnizerStateEnded时写点东西。 –

0

首先当u要显示你的子视图,这是对你的UIBarButtonItem的点击:

-(IBAction)buttonClick 
{ 
     //setup ur view dynamically as you like// 
     PSview=[[UIView alloc]initWithFrame:CGRectMake(5, 5, 310,450)]; 
     PSview.backgroundColor=[UIColor blackColor]; 
     PSview.alpha=0.8; 
     [PSview.layer setBorderColor: [[UIColor whiteColor] CGColor]]; 
     [PSview.layer setBorderWidth: 3.0]; 


    PSview.contentMode=UIViewContentModeScaleAspectFill; 
    PSview.clipsToBounds=YES; 
    [PSview.layer setBorderColor: [[UIColor whiteColor] CGColor]]; 
    [PSview.layer setBorderWidth: 3.0]; 

    [PSview addSubview:subView]; 
    [self.view addSubview:PSview]; 

}

再后来:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
//since there are two tables in one view, you can differentiate them using if() 
    if(tableView==subView) 
     { 
      // ...ur code . .. 
      // write your code what needs to happen when you click a row of your subView. 
      [PSview removeFromSuperview]; 
     } 
    if(tableView==mainView) 
     { 
     // write your code , what happens when user clicks row of the main table 
     } 
    } 
+0

你能否详细说明你的看法? –

+0

感谢您的回答 –

+0

是的,我知道那..但无法解决我的问题 –

相关问题