簡體   English   中英

當鍵盤可見時,ScrollView不會自動向上移動

[英]ScrollView is not automatically moving up when keyboard is visible

當鍵盤出現在屏幕上時,我將滾動視圖向上移動時遇到問題。 我的屏幕上有4個文本字段,並且都是數字小鍵盤文本字段,沒有下一個/完成返回鍵,為此,我在鍵盤上添加了帶有上一個和下一個按鈕的自定義工具欄。 因此,當我使用next按鈕從一個文本字段移動到另一個文本字段時,光標會正確移動到下一個字段,但是scrollview不會向上移動,因此我的文本字段隱藏在鍵盤后面。 我已將滾動視圖添加到我的情節提要中,並設置了文本字段的代表。

碼:

override open func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.registerForKeyboardNotifications()
        keyboardVisible = false
    }


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

        self.deregisterFromKeyboardNotifications()

    }



func registerForKeyboardNotifications ()-> Void   {

        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWasShown(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)

        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillBeHidden(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

    }

func deregisterFromKeyboardNotifications () -> Void {
        let center:  NotificationCenter = NotificationCenter.default
        center.removeObserver(self, name: NSNotification.Name.UIKeyboardDidShow, object: nil)
        center.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)


    }





func keyboardWasShown (_ notification: Notification) {
        if(keyboardVisible == true){
            return
        }

        print(scrollView)
        if let keyboardSize = ((notification as NSNotification).userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {

            offset = scrollView!.contentOffset
            print(offset)

            var viewFrame = scrollView!.frame
            viewFrame.size.height -= keyboardSize.height
            scrollView!.frame = viewFrame

            var textFieldRect = activeField?.frame
            textFieldRect?.origin.y += 10;
            scrollView!.scrollRectToVisible(textFieldRect!, animated: true)

            keyboardVisible = true;


        }


    }

  func keyboardWillBeHidden (_ notification: Notification) {

        if(keyboardVisible == false){
            return;
        }
        scrollView.frame = CGRect(x: 0, y: 0, width: scrollViewWidth, height: scrollViewHeight)
        scrollView?.contentOffset  = offset

        keyboardVisible = false


    }


// textfield delegate

//in textfieldDidBeginEditing i m setting custom toolbar on textfield input accesory view
open func textFieldDidBeginEditing(_ textField: UITextField) {
        if(textField == myTextField1){
            myTextField1.inputAccessoryView = myCustomToolbar
            myCustomToolbar?.nextButton.isEnabled = true
            myCustomToolbar?.previousButton.isEnabled = false
            myCustomToolbar?.nextButton.title = "Next"
        }else if(textField == myTextField2){
            myTextField2.inputAccessoryView = myCustomToolbar
            myCustomToolbar?.previousButton.isEnabled = true
            myCustomToolbar?.nextButton.isEnabled = true
            myCustomToolbar?.nextButton.title = "Next"
        }else if(textField == myTextField3){
            myTextField3.inputAccessoryView = myCustomToolbar
            myCustomToolbar?.nextButton.isEnabled = true
            myCustomToolbar?.previousButton.isEnabled = true
            myCustomToolbar?.nextButton.title = "Next"
        }else if(textField == myTextField4){
            myTextField4.inputAccessoryView = myCustomToolbar
            myCustomToolbar?.nextButton.isEnabled = true
            myCustomToolbar?.previousButton.isEnabled = true
            myCustomToolbar?.changeNextToActionButton(withTitle: "Some title")
        }
    }


   open func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        activeField = textField
        return true
    }


//PnPToolbar Delegate

    public func pnPToolbarNextButtonClicked(_ myCustomToolbar: myCustomToolbar!) {
        if(myTextField1.isFirstResponder){
            myTextField2.becomeFirstResponder()
        }else if(myTextField2.isFirstResponder){
            myTextField3.becomeFirstResponder()
        }else if(myTextField3.isFirstResponder){
            myTextField4.becomeFirstResponder()

        }else if(ifscCode.isFirstResponder){
            //Done call your method
            self.myMethod()
        }
        var textFieldRect = activeField?.frame
        textFieldRect?.origin.y += 10;
        scrollView!.scrollRectToVisible(textFieldRect!, animated: true)
    }

    public func myCustomToolbarPreviousButtonClicked(_ myCustomToolbar: myCustomToolbar!) {
        if(myTextField4.isFirstResponder){
            myTextField3.becomeFirstResponder()
        }else if(myTextField3.isFirstResponder){
            myTextField2.becomeFirstResponder()
        }else if(myTextField2.isFirstResponder){
            myTextField1.becomeFirstResponder()
        }
        var textFieldRect = activeField?.frame
        textFieldRect?.origin.y += 10;
        scrollView!.scrollRectToVisible(textFieldRect!, animated: true)

    }

當我從myTextField1移動到myTextField2時,光標移至第二個文本字段,但scrollview不會向上移動,scrollview的內容大小也不會向上移動超出鍵盤。

在TextField的委托中管理您的標志,如下所示:

 func textFieldDidBeginEditing(_ textField: UITextField) {
        keyboardVisible = true
    }

    func textFieldEndEditings(sender:UITextField) -> Void {
        print(sender.text)
        keyboardVisible = false
    }

對於鍵盤上方的工具欄

let numberToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.frame.size.width, 50))
numberToolbar.barStyle = UIBarStyle.Default
numberToolbar.items = [
            UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelNumberPad"),
            UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil),
            UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneWithNumberPad")]
    numberToolbar.sizeToFit()
    phonenumberTextField.inputAccessoryView = numberToolbar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM