2015-02-16 5 views
0

Я пытаюсь преобразовать OBJ-код в быстрый для перемещения контента, который находится под клавиатурой. У меня проблема с именем «CGPoint не конвертируется в CGRect» в методе keyboardWillShown(). Я не знаю, как с этим справиться. Ниже приведена моя часть кода -Клавиатура с NSNotificationCenter в swift

func registerForKeyboardNotifications(){ 
    var center1 = NSNotificationCenter.defaultCenter() 
    center1.addObserver(self, selector: Selector("keyboardWillShown"), name: UIKeyboardWillShowNotification, object: nil) 

    var center2 = NSNotificationCenter.defaultCenter() 
    center2.addObserver(self, selector: Selector("keyboardWillBeHidden"), name: UIKeyboardWillHideNotification, object: nil) 
} 

func registerForKeyboardNotifications(){ 
    var center1 = NSNotificationCenter.defaultCenter() 
    center1.addObserver(self, selector: Selector("keyboardWillShown"), name: UIKeyboardWillShowNotification, object: nil) 

    var center2 = NSNotificationCenter.defaultCenter() 
    center2.addObserver(self, selector: Selector("keyboardWillBeHidden"), name: UIKeyboardWillHideNotification, object: nil) 
} 

func keyboardWillShown(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
     let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0) 
     self.scrollView.contentInset = contentInsets 
     self.scrollView.scrollIndicatorInsets = contentInsets 

     // If active text field is hidden by keyboard, scroll it so it's visible 
     var aRect : CGRect = self.view.frame 
     aRect.size.height -= keyboardSize.height 
     if !CGRectContainsPoint(aRect, self.textView.frame.origin) { 
      //This below line shows error 
      self.scrollView.scrollRectToVisible(self.textView.frame.origin, animated: true) 
     } 
    } 
} 

func keyboardWillBeHidden() { 
    println("Keyboard hidden") 
} 

ответ

0

ОБНОВЛЕНО!

Клавиатура и текстовый вид, возможно, рядом с тем, что мы ищем, попробуйте это.

В этом коде я не использую scrollView и вместо того, чтобы перемещать textView.frame, я использую contentInset для отслеживания курсора.

В вашем viewDidLoad registerForKeyboardNotification и установить делегат себя:

override func viewDidLoad() { 
    registerForKeyboardNotification() 
    textView.delegate = self 
} 

Тогда вам нравится:

func registerForKeyboardNotification() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWasShown:"), name: UIKeyboardDidShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillBeHidden:"), name: UIKeyboardWillHideNotification, object: nil) 
} 

func keyboardWasShown(aNotification: NSNotification) { 
    let info = aNotification.userInfo! 
    let kbSize = (info[UIKeyboardFrameBeginUserInfoKey])!.CGRectValue.size 
    let contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0) 
    textView.contentInset = contentInsets 
    textView.scrollIndicatorInsets = contentInsets 
} 

func keyboardWillBeHidden(aNotification: NSNotification) { 
    let contentInsets = UIEdgeInsetsZero 
    textView.contentInset = contentInsets 
    textView.scrollIndicatorInsets = contentInsets 
    textView.resignFirstResponder() 
} 

Это работало для меня с Xcode 7 бета 4. Надежда, что помогает кому-то.

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