2015-09-30 2 views
0

Я разрабатываю приложение iOS, которое использует элемент PageViewController для переноса нескольких «чатов». У меня есть TextField на каждой странице, и когда я сажусь, чтобы перейти на другую страницу, я хочу изменить фокус с текущей страницы TextField на новую страницу TextField, не теряя клавиатуру.iOS Swift: перемещение фокуса с одного текстового поля на другое

Я пробовал разные подходы, но я не могу этого сделать, каждый раз, когда я вызываю startFirstResponder на новой странице TextField, клавиатура идет вниз, а затем немедленно поднимается, а затем текстовые поля становятся первым ответчиком.

Вы можете мне помочь?

Спасибо!

+0

Вы вызываете 'resignFirstResponder' в старом текстовом поле? Если да, то нет. – rmaddy

+0

Nop. Я не использую resignFirstResponder вообще – agurz

ответ

2

Я был в состоянии найти решение этой проблемы:

Использование переменной в каждой странице

var firstResponderIsLocked: Bool = false 

Чтобы проверить, если TextField должен закончить редактирование

func textFieldShouldEndEditing(textField: UITextField) -> Bool { 
    return !firstResponderIsLocked 
} 

И его обработки когда я провел между страницами:

func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [UIViewController]) { 
    if let viewControllerToShow = pendingViewControllers[0] as? LiveMessagingPageContentViewController { 
     pendingViewControllerIndex = viewControllerToShow.index 
     lockFirstResponder(pendingViewControllerIndex!) 
    } 
} 

func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    if completed && pendingViewControllerIndex != nil { 
     takeFirstResponder(pendingViewControllerIndex!) 
    } 
    pendingViewControllerIndex = nil 
} 

Я прикладываю свое приложение к работе по мере необходимости.

1

Поместите текстовое поле на вид контроллера просмотра страницы, а не на каждую дочернюю страницу. От контроллера просмотра страницы вызовите self.view.bringSubviewToFront(textField), чтобы поставить его сверху.

Я только что протестировал это в новом проекте (используя шаблон «Страница на основе приложения»), и он отлично работает.

+0

Спасибо за ваш awnser jrc. Это правильное решение, но мне нужно иметь текстовое поле на каждой дочерней странице, потому что я не хочу потерять текст, введенный в текстовое поле, когда я перехожу на другую страницу (возможно, я мог бы сохранить текст в переменной дочерней страницы, но Я нашел хорошее мое текущее решение) – agurz

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