22

iPad用の「Master-Detail Application」テンプレートから作成した単純なxcodeプロジェクトがあります。デバイスが縦向きの場合、マスター ビューは非表示になり、詳細ビューを右にスワイプすると、マスター ビューが表示されます。今、右スワイプジェスチャレコグナイザーを詳細ビューに追加したいと思います。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];

    UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler)];
    [self.view addGestureRecognizer:gestureRecognizer];
}

-(void)swipeHandler{
    NSLog(@"SWIPE");
}

しかし、このコードにより、詳細ビューをスワイプすると、「SWIPE」ログがコンソールに表示されますが、マスター ビューは表示されません。

右スワイプ ジェスチャ レコグナイザーを詳細ビューに追加して、マスター ビューが表示されないようにし、レコグナイザーのハンドラーが機能するようにするにはどうすればよいですか?

前もって感謝します。

編集。右のスワイプ認識ハンドラーを、マスター ビューを表示するこのビルトイン ハンドラーと同時に動作させたいのですが、次のコードはこの特定の状況の解決策ではありません。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

    return YES;
}
4

5 に答える 5

38

右スワイプを追加するには、スワイプの方向を設定する必要があります

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler:)];
    [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
    [self.view addGestureRecognizer:gestureRecognizer];

スワイプハンドラーは次のようになります

-(void)swipeHandler:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"Swipe received.");
}
于 2013-03-01T19:53:04.807 に答える
19
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRecognizer:)];
    recognizer.direction = UISwipeGestureRecognizerDirectionRight;
    recognizer.delegate = self;
    [self.view addGestureRecognizer:recognizer];
}

- (void)swipeRecognizer:(UISwipeGestureRecognizer *)sender {
    if (sender.direction == UISwipeGestureRecognizerDirectionRight){
        [UIView animateWithDuration:0.3 animations:^{
            CGPoint Position = CGPointMake(self.view.frame.origin.x + 100.0, self.view.frame.origin.y);
            self.view.frame = CGRectMake(Position.x , Position.y , self.view.frame.size.width, self.view.frame.size.height);
            [self.navigationController popViewControllerAnimated:YES];
        }];
    }
}
于 2015-01-09T12:36:09.563 に答える
0

これは機能します。これは、view Controller を navigationController からプッシュします。

- (void)viewDidLoad
{
     [super viewDidLoad];
     // Do any additional setup after loading the view, typically from a nib.
     UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer           alloc] initWithTarget:self  action:@selector(swipeHandler:)];
     [self.view addGestureRecognizer:gestureRecognizer];
}

-(IBAction)swipeHandler:(UISwipeGestureRecognizer *)sender
{
      NSLog(@"SWIPE");
      UIViewController *tb = [[DetailViewController alloc] init];
      tb = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
      [self.navigationController pushViewController: tb animated:YES];
}

次に、必ずストーリーボードに移動してください (または、これを手動で行うこともできます) - Detail View Controller をクリックし、View Controller に Identity: DetailViewController を与えます。

于 2013-03-01T20:05:57.527 に答える