2016-02-29 2 views
3

Привет Я использую этот код для перемещения своего представления при выборе textView, чтобы убедиться, что мой texView виден, когда клавиатура всплывает.Как перемещать представление, если выбран только определенный textView

override func viewDidLoad() { 
    super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: self.view.window) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: self.view.window) 
} 


func keyboardWillHide(sender: NSNotification) { 

    let userInfo: [NSObject : AnyObject] = sender.userInfo! 
    let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size 
    self.view.frame.origin.y += keyboardSize.height 

} 

func keyboardWillShow(sender: NSNotification) { 

    let userInfo: [NSObject : AnyObject] = sender.userInfo! 

    let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size 
    let offset: CGSize = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue.size 

    if keyboardSize.height == offset.height { 
     if self.view.frame.origin.y == 0 { 
      UIView.animateWithDuration(0.1, animations: {() -> Void in 
       self.view.frame.origin.y -= keyboardSize.height 
      }) 
     } 
    } else { 
     UIView.animateWithDuration(0.1, animations: {() -> Void in 
      self.view.frame.origin.y += keyboardSize.height - offset.height 
     }) 
    } 
    print(self.view.frame.origin.y) 

} 


override func viewWillDisappear(animated: Bool) { 

    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: self.view.window) 
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: self.view.window) 

} 

enter image description here

Как я только переместить вид, если выбран нижний TextView? Поскольку в настоящее время, если вы выбираете самый верхний textView, он перемещает половину его с экрана.

Я ценю любую помощь, спасибо заранее.

+0

Если ваш 'UITextView' не будет иметь вертикальную прокрутку, почему бы вам не вставлять их (и любой другой контент) в одно прокрутку, что позволяет прокручивать весь экран? Таким образом, вы можете прокручивать представление прокрутки вместо настройки кадров отдельного вида. Что касается дифференциации 'UITextField', используйте методы делегата, как предлагает @ konrad.bajtyngier. – paulvs

ответ

1

In t он уведомляет обратные вызовы для bottomTextView.isFirstResponder() и перемещает представление только в том случае, если оно истинно. В противном случае не перемещайте представление.

+0

Спасибо, что отлично поработали. –

0

Я предлагаю использовать delegate. Например, вы можете установить нижнее textViewdelegate в self (сначала введите UITextViewDelegate) и реализовать метод textViewDidBeginEditing(_:). Когда это запустится, вы узнаете, что пользователь начал редактировать это конкретное представление.

0

Сделайте свой класс а UITextViewDelegate так:

class ViewController: UIViewController, UITextViewDelegate { 

Тогда в viewDidLoad устанавливается только нижний TextView находиться под контролем делегата:

bottomTextView.delegate = self 

Затем вы можете использовать эти функции, изменяя в соответствии с вашими потребностями:

func textViewDidBeginEditing(textView: UITextView) { 
    self.view.frame.origin.y -= 150 
} 


func textViewDidEndEditing(textView: UITextView) { 
    self.view.frame.origin.y += 150 
} 
1

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

Что я делаю, это следить за тем, какое текстовое поле выбрано, и выполнить некоторые вычисления, чтобы переместить представление содержимого контроллера просмотра достаточно, чтобы открыть текстовое поле, которое становится активным.

Для этого вам нужно настроить контроллер вида как делегаты текстовых полей.

У меня есть сообщение в блоге развития, который объясняет это в деталях:

Shifting views to make room for the keyboard

Код в этой должности находится в Objective-C, но понятия идентичны. Я не уверен, что у меня есть тот же код в Swift, который я могу предоставить (единственный код, который я нашел, в проекте, который я сделал для клиента.)

Это сообщение в блоге ссылается на проект под названием RandomBlobs на Github.

+0

сказать @duncanC. Вы знаете, как UITableView сделает это за вас. На самом деле, с ios10, есть ли что-нибудь еще в ios, которое делает это для вас? (возможно, представление в стеке или?) Мне трудно найти doco на этом, и я работаю с ОС каждый день! ура – Fattie

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