3

我有一个320x144名为的小型视图控制器SubViewController.h,其中有一个 UITableView,其中包含 3 个单元格和一个部分。我已经使 tableView 不可滚动,并且还通过CALayer.

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

我用UIBarButtonItem. 在子视图的 tableView 中选择一个单元格后,我通过一些动画让它从主视图中消失。

一切正常。

但是当我拖动子视图然后尝试选择一个单元格时,我必须点击该单元格两次。在第一次点击中,除了单元格变为蓝色(就像您在 tableView 中选择一个单元格时通常发生的那样),实际上什么都没有发生,但没有隐藏。如果我再次点击,它将隐藏。

在不拖动子视图的情况下,我可以通过一次触摸选择一个单元格,并且视图也会隐藏。

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

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

4

2 回答 2

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;
. . .
}
于 2012-09-11T10:28:07.860 回答
0

首先,当您希望显示您的子视图时,即单击您的 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
       }
    }
于 2012-09-11T10:45:55.080 回答