2017-05-08 13 views
0

私は4つのタブを持つUIPageViewControllerを持っています。 3つのテーブルと1つのwebview。問題は、垂直スクロールが機能しないことです。迅速にこれを解決するにはどうすればいいですか?UIPageViewController:テーブル垂直スクロールが機能しません

これは私のコードです:

func createTxtPageViewController() { 

     let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("pagetxtController") as! UIPageViewController 
     pageController.dataSource = self 
     pageController.delegate = self 

     if texts.count > 0 { 
      let firstController = getItemTxtController(0)! 
      let startingViewControllers = [firstController] 
      pageController.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
     } 

     pageTxtViewController = pageController 
     pageTxtViewController?.view.frame = CGRectMake(10, 173, self.rightView.frame.size.width - 20, self.rightView.frame.size.height - 183) 

     addChildViewController(pageTxtViewController!) 
     self.rightView.addSubview(pageTxtViewController!.view) 
     pageTxtViewController!.didMoveToParentViewController(self) 
    } 
+0

コンテナビュー 'self.rightView.addSubview(pageTxtViewController!の.view)を追加するためには、'そして 'addChildViewController(pageTxtViewController!)' –

+0

@KhalidAfridiこの – breno

+0

あなたがあなたの中に機能をスワイプしているかを動作しない変更しようpageViewController? –

答えて

0

あなたはそれはあなたがUIGestureRecognizerDelegateを使用して手動でチェックをしなければならないのtableViewのジェスチャー認識を上書きしようとするのですPanGestureRecognizerを追加した場合。

let pangGesture = UIPanGestureRecognizer(target: self, action: #selector(createTxtPageViewController(recognizer:))) 
pangGesture.delegate = self 
self.view.addGestureRecognizer(pangGesture) 

、あなたはあなたのcreateTxtPageViewController機能チェックの内側に今touchLocation

var panStartPoint: CGPoint! 

のためにあなたのクラスの先頭にするCGPointのプロパティを宣言

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 

    // we check for panGesture if it's panGesture we continue if not return   
    guard let recognizer = gestureRecognizer as? UIPanGestureRecognizer else { 
     return true 
    } 

    // The velocity of the pan gesture in the coordinate system of the specified view. 
    let velocity = recognizer.velocity(in: self.view) 

    // If velocity.y is greater than velocity.x user is trying to scroll tableView else user wants to swipe to next screen 
    return abs(velocity.y) > abs(velocity.x) ? false : true 
} 

gestureRecongizerShouldBeginデリゲートの機能を実装する必要があります状態を検出し、ユーザが左または右にスワイプ方向を検出する

func createTxtPageViewController(recognizer: UIPanGestureRecognizer) { 


    switch recognizer.state { 
    case .began: 
     touchLocation = recognizer.location(in: self.view) 
    case .changed: 
     let currentPoint = recognizer.location(in: self.view) 
     let swipingLeft = currentPoint.x < touchLocation.x ? true : false 

     if !swipingLeft { 
      // swiped right 
      //TODO: Add your logic for navigation to nextViewController 
     } else { 
      // swiped left 
      //TODO: Add your logic for navigation to nextViewController 
     } 
     // you can check for other states as well and clean up after your self e.g state.cancelled I just break 
    default: 
     break 
    } 

} 
+0

申し訳ありませんが、私は理解できませんでした。私は私のUIPageViewControllerをジェスチャーで置き換えるつもりですか? – breno

+0

あなたはすでにあなたのUIPageViewControllerでスワイプジェスチャーをしていると思いますか? –

+0

はい私はそれを持っており、それは動作します。私はなぜUIPageViewControllerの作成に使用される私の "createTxtPageViewController"メソッドをやり直すのか分かりませんでした。 – breno

関連する問題