2016-11-25 4 views
1

У меня в моем приложении Swift 3 есть HomeViewController, содержащий UITableView. Когда нажимается ячейка таблицы, я показываю detailViewController. Я показываю его как ребенка, используя addChildViewController(vc). Я хочу реализовать обратный жест, чтобы вернуться к homeViewController. Я хочу получить тот же результат, что и режим обратной связи в приложении Mail по умолчанию для устройств (режим возврата для возврата в дом почты, когда я был в папке «Входящие»). Другими словами, жест позволяет пользователю перетащить представление слева направо, а затем продолжить движение слева направо до отображения домашнего вида или перетащить вид справа налево, чтобы сохранить подробный вид на весь экран , Я попытался сделать это, используя UIPanGestureRecognizer, но мой взгляд идет влево и вправо, а иногда и показывает домашний вид с правой стороны. Итак, вкратце, результат, который я хочу, такой же, как функциональность обратного жеста приложения Mail.Swift 3: Жест назад

Это мой код:

var rightSwipe: UIPanGestureRecognizer = UIPanGestureRecognizer() 
     self.rightSwipe = UIPanGestureRecognizer(target: self, action: #selector(self.handleSwipes(_:))) 
     self.view.addGestureRecognizer(rightSwipe) 
func handleSwipes(_ sender: UIPanGestureRecognizer){ 

     if self.rightSwipe.state == .began || self.rightSwipe.state == .changed { 

      let translation = rightSwipe.translation(in: self.view) 
      // note: 'view' is optional and need to be unwrapped 
      //print("translation is : \(translation)") 
      if(translation.x > 0 && translation.y == 0.0){ 
      self.rightSwipe.view!.center = CGPoint(x: self.rightSwipe.view!.center.x + translation.x, y: self.rightSwipe.view!.center.y + translation.y) 
      rightSwipe.setTranslation(CGPoint.zero, in: self.view) 
      } 

     } 
    } 
+0

Если вы хотите это поведение, просто нажмите на свой ViewController в стеке навигации. –

+0

Можете ли вы подробнее объяснить? –

+0

Я тестировал 'self.navigationController.pushViewController (vc, animated: true)' вместо addChild, но когда я нажимаю на ячейку, detailViewController не появляется. Это потому, что мой HomeViewController является UIViewController? –

ответ

0

Чтобы использовать NavigationController в раскадровку поместить его ваш HomeViewController с UINavigationController. Чтобы внедрить navigationController, выберите HomeViewController, в меню выберите Editor > Embed In > Navigation Controller.

Сейчас в didSelectRowAt indexPath нажмите detailViewController.

self.navigationController?.pushViewController(detailVC, animated: true) 

Если еще жест не работает, то в HomeViewController «s viewDidLoad этот набор.

self.navigationController?.interactivePopGestureRecognizer.isEnabled = true 
+0

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/129230/discussion-on-answer-by-nirav-d-swift-3-back-gesture). –

Смежные вопросы