2015-02-02 2 views
0

Я не знает, почему, но не кажется, мой жест распознавань для моего контроллера зарегистрирует, я использую UITableViewController и провел следующие шаги:Swift: Жест распознавань не регистрирует

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.delegate = self // This should be done already as it is a subclass 
           // of UITableViewController, just put this to debug... 

    // Gesture Recognisers - never seems to register (action never called) 
    let swipeDown = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:") 
    swipeDown.direction = UISwipeGestureRecognizerDirection.Down 
    self.tableView.addGestureRecognizer(swipeDown) 
} 

После регистрации действия обратного вызова для жеста в viewDidLoad() я следующий метод объявлен:

func respondToSwipeGesture(gesture: UIGestureRecognizer) { 

    // Can we unwrap safely? 
    if let swipeGesture = gesture as? UISwipeGestureRecognizer { 

     switch swipeGesture.direction 
     { 
     case UISwipeGestureRecognizerDirection.Down: 
      break 
     case UISwipeGestureRecognizerDirection.Up: 
      break 
     case UISwipeGestureRecognizerDirection.Left: 
      break 
     case UISwipeGestureRecognizerDirection.Right: 
      break 
     default: 
      break 
     } 
    } 
} 

Я установить контрольные точки по всем respondToSwipeGesture() FUNC, но это, кажется, что метод никогда даже не называют - то, что может быть причиной го является? Я запускаю некоторые методы популяции данных в отдельном потоке, но я не считаю, что это должно противоречить зарегистрированному распознавателю жестов.

+1

Мне кажется, что 'tableView' перехватывает и поглощает события касаний до ваших жестов. Вероятно, вы можете предпочесть добавить распознаватель жестов к вашему TableViewCells. –

+0

, что имеет смысл, я дам вам попробовать – Alex

+0

В любом случае, с точки зрения пользователя может показаться нецелесообразным прокручивать вниз по вертикальному контейнеру прокрутки. С жестом внутри ячейки, вероятно, вы должны реализовать делегата жеста в любом случае, чтобы работать с обычной вертикальной спиральной сталью. –

ответ

1

Вот простой пример, который просто печатает, если ваш Tableview прокрутки вверх или вниз:

var offsetY: CGFloat = 0 { 
     didSet { 
      if oldValue > offsetY { 
       println("Going down!") 
      } else { 
       println("Going up!") 
      } 
     } 
    } 

    //MARK: Scroll View Delegate 

    func scrollViewDidScroll(scrollView: UIScrollView) { 

     // Verify that the sander is your tableView 
     // Not needed if the only scrollView is the tableView 
     if scrollView === self.tableView { 
      offsetY = scrollView.contentOffset.y 
     } 
    } 


    //MARK: View Lifecycle 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     // You can do it in your storyboard 
     tableView.delegate = self 

    } 

После того, как ваш ViewController является Tableview делегируют он получит также UIScrollViewDelegate сообщения от Scrollview в Tableview в. В протоколе UIScrollViewDelegate вы можете найти то, что вы ищете. Приведенный выше пример можно использовать для сохранения другого вида sticky в фиксированном положении внутри таблицыView.

+0

Это сработало, спасибо – Alex

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