【问题标题】:swift move view when keyboard appears - Bug出现键盘时快速移动视图 - 错误
【发布时间】:2015-10-28 23:04:34
【问题描述】:

我是 swift 的新开发者,不知道如何解决我的问题。我有两种看法。一个用于注册,一个用于登录。我将以下功能添加到我的视图控制器中,一切正常。当我单击每个文本字段(用于密码、用户名)时,视图会在键盘出现时向上移动。但是当我登录用户并在调用我的代码的“第 2 部分”并且用户登录后,视图从我的 signInView 更改为我的 signUpView。问题:在我现在在我的 textFields 上执行以下步骤和选项卡后,键盘不再出现。

第 1 部分:signInViewController 中的代码:

var kbHeight: CGFloat!

override func viewDidLoad() {
    super.viewDidLoad()

    textFieldUserName.delegate = self
    txtFieldUserPassword.delegate = self
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
    txtFieldUserPassword.resignFirstResponder()

    return true
}

//viewDidAppear or viewWillAppear?
override func viewDidAppear(animated:Bool) {
    super.viewWillAppear(animated)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    NSNotificationCenter.defaultCenter().removeObserver(self)
}

func keyboardWillShow(notification: NSNotification) {
    if let userInfo = notification.userInfo {
        if let keyboardSize =  (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
            kbHeight = keyboardSize.height-50
            self.animateTextField(true)
        }
    }
}

func keyboardWillHide(notification: NSNotification) {
    self.animateTextField(false)
}

func animateTextField(up: Bool) {
    let movement = (up ? -kbHeight : kbHeight)

    UIView.animateWithDuration(0.3, animations: {
        self.view.frame = CGRectOffset(self.view.frame, 0, movement)        //Fatal Error: nil sometimes? - Why?
    })
}

第 2 部分:signInViewController 中的代码

do {
        try signup.signUpUser()
        self.showAlert(self)
} catch ...


func showAlert(viewController : UIViewController) -> Void {

    let alertController = UIAlertController(title: "Registrieren erfolgreich", message: "Sie können sich jetzt Anmelden", preferredStyle: .Alert)

    alertController.addAction(UIAlertAction(title: "Anmelden", style: .Default, handler: { (alertAction) -> Void in self.dismissViewControllerAnimated(true, completion: nil) }))

    viewController.presentViewController(alertController, animated: true, completion: nil)

【问题讨论】:

    标签: ios swift view keyboard


    【解决方案1】:

    我在我的一个应用程序中使用了这个名为 TPKeyboardAvoiding 的便捷解决方案:https://github.com/michaeltyson/TPKeyboardAvoiding

    有了这个库,你就不需要在你的应用上处理这种滚动行为了,想象一下你在其他 VC 中可以有其他的行为,你每次都需要计算它。

    【讨论】:

    • 这并没有真正帮助我。它是客观的 c 代码,视图动态移动。我想自己说视图应该移动多少
    猜你喜欢
    • 2016-05-07
    • 2017-01-08
    • 2017-01-29
    • 2010-12-19
    • 2020-10-17
    • 1970-01-01
    • 2014-10-30
    • 2018-05-21
    相关资源
    最近更新 更多