3

320x144UITableViewという名前の小さなビューコントローラーSubViewController.hがあり、単一のセクションを持つ3つのセルがあります。私はtableViewをスクロールできないようにし、CALayer.

MainViewController.mi という名前の別のビューコントローラーSubViewController.hで、サブビューとして thisに追加しましたMainViewController。を使用しUIPanGestureRecognizerて、SubViewContoller を好きな場所にドラッグすることに成功しました。

この subView を で表示できるようにしUIBarButtonItemます。サブビューのtableViewでセルを選択した後、アニメーションでメインビューから消えました。

すべて正常に動作します。

しかし、サブビューをドラッグしてから 1 つのセルを選択しようとすると、セルを 2 回タップする必要があります。最初のタップでは、セルが青色に変わる以外は実際には何も起こりません(tableViewでセルを選択したときに通常起こるように)が、非表示にはなりません。もう一度タップすると非表示になります。

サブビューをドラッグしなくても、ワンタッチで1つのセルを選択でき、ビューも非表示になります。

didSelectRowAtIndexPath:サブビューのメソッドでサブビューを非表示にするコードを書きました。そして、サブビューをドラッグした後に初めて選択したときに、このメソッドが呼び出されないことを確認しました.2回目のタップまたはタッチでは、呼び出されます。また、ユーザーがサブビューを再度移動すると、同じ問題が発生します。

確かに、サブビューの一部のプロパティがドラッグ後に変更されましたが、これを理解することはできません。

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 に答える