2016-10-07 6 views
0

У меня есть ViewController, который определяет touchesMoved() для увеличения счетчика, как пользователь перетаскивает палец по экрану:touchhesMoved видел все контроллеры представлений в Swift?

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    numMoved += 1 
    print("Moved: \(numMoved)") 
} 

Когда пользователь переходит к другому контроллеру вида, который не имеет touchesMoved(), определенный, Я ожидаю, что ничего не произойдет. (Новый контроллер представления определен как класс OtherViewController, который наследуется непосредственно от UIViewController и поэтому не получает касаниеМодельное() переопределение, которое я определил для первого контроллера представления.)

Однако, нажав кнопку, которая приносит я к другому контроллеру представления, я все еще вижу напечатанные сообщения, то есть touchtsMoved() все еще вызывается, хотя я больше не на исходном контроллере представления, который отслеживает перетаскивание.

Я пропустил какую-то простую вещь, которая обеспечила бы, что переопределение касанияMoved() влияет только на ViewController, в котором он определен внутри?

Спасибо за любые идеи.

+0

Что означает «идет к другому контроллеру представления»? Идет _how_? Я пытаюсь заставить вас указать отношения между ViewController и OtherViewController. – matt

+0

Главный контроллер представления - это ViewController по умолчанию, а OtherViewController - это то, что я создал как подкласс UIViewController. Я поместил кнопку на ViewController, которая помечается в OtherViewController модально. Других отношений между двумя контроллерами представлений нет. – hitlad

ответ

0

Вместо определения touchesMoved в контроллере вида определите его в виде . Основной вид контроллера будет выполнен. (Вам необходимо подклассифицировать UIView и сделать основной вид контроллера вида экземпляром этого подкласса.)

Он будет иметь тот же эффект, но теперь вы не находитесь в иерархии диспетчера вида, и вы не получите сообщений с представлений диспетчера другого представления.

Другая альтернатива: вытащите UITouch из touches: и посмотрите на его view. Если это не ваше мнение, игнорируйте этот вызов.

+0

Определение его в представлении, а не в контроллере представления, устраняет проблему, поэтому я принял ответ (спасибо!), Но я до сих пор не знаю, почему полностью независимый контроллер просмотра будет конфликтовать с событиями перемещения другого контроллера представления. – hitlad

+0

Это не «полностью независимый». Вот почему я попросил вас рассказать мне о взаимоотношениях между двумя диспетчерами. У них есть отношения! ViewController - это контроллер представления представления. OtherViewController - представленный контроллер представления. Это означает, что ViewController находится рядом с цепочкой _респондера_ из OtherViewController. Поэтому, когда OtherViewController не справляется с 'touchhesMoved', он идет дальше по цепочке ответчиков и достигает ViewController. – matt

+0

Просто, чтобы убедиться, что я понимаю ваше объяснение: когда контроллер вида A переходит к другому контроллеру представления, B через модальный сегмент, то A является частью цепи ответчика событиям в B? Если это так, то я полагаю, что B не должен автоматически переходить к A, когда это будет сделано, поскольку это создаст более длинную цепочку ответчиков, а не сократит ее до единицы без B. Это правильно? Благодарю. – hitlad

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

  • Нет связанных вопросов^_^