텍스트 필드에 키보드가 묻지 않도록 (다양한 버전) swift3

16707 단어 XcodeiOSSwiftswift3
제목대로입니다만, 텍스트 필드에 키보드를 쓰지 않게 하는 방법입니다. 이 방식에 따라 각각 있기 때문에 패턴화하고 남겨두고 싶습니다. 상당히 이것 자신적으로는 원했기 때문에, 어쩌면과 공유해 두려고 합니다. 덧붙여서 여기에서 코드 쓰면 상당히 가득 있으므로 github에 올리고 있습니다. 코드를 복제해 보시면 좋겠습니다.

github URL → htps : // 기주 b. 코 m/사치코-카메/수 ft. mp19

그건 그렇고, 프로젝트는 집에 종류를 씁니다.


천이처로 클래스 나누어서 쓰고 있습니다.


이것을 만들기에 있어서 참고로 한 URL입니다. 이 클래스는 어디의 url을 참고로 한지도 위에 써 있습니다.

쓰는 만큼 스크롤하여 조정 참고 가장 추천, 덧붙여서 이것이 상당히 많았던 인상 받았습니다.
ぃ tp // 코 m / 고바보 y / ms / d56086b92f84c586562d

애니메이션 붙여 view의 축소에서의 조정의 참고
htp : //는 ck에서. jp/아 r ゔぇ s/7958/

제약을 사용한 조정 참고
h tp // 코 m / s 마 rtp

AutoLayout 참고
htp : // bg.ぺr 소나 l 푸 c와 ry. 코 m/2016/01/11/마케-아우토-아요 tゔぃ아코로/

탭으로 키보드 닫기 참고
htps : ///-아-p- c. 코 m / 이오 s / 우이게 s 트레코 g에 꼭 r. HTML

역시 제일 좋아하는 클래스만 코드 올려 둡니다! !

pattern2ViewController.swift
//参考URL http://qiita.com/kobaboy/items/d56086b92f84c586562d
class pattern2ViewController: UIViewController ,UITextFieldDelegate, UIScrollViewDelegate {

    var txtActiveField = UITextField()
    var scrollFormer:CGFloat! = nil
    let scrollViewsample = UIScrollView()


    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.blue

        let mainViewFrame = UIScreen.main.bounds

        scrollViewsample.frame = mainViewFrame
        scrollViewsample.contentSize = CGSize(width:mainViewFrame.size.width , height:mainViewFrame.height + 150)
        let sampletextFile = UITextField()
        sampletextFile.delegate = self
        sampletextFile.text = "パターン2"
        sampletextFile.borderStyle = UITextBorderStyle.roundedRect
        sampletextFile.frame.size.width = mainViewFrame.size.width/2
        let rec = CGRect(x: mainViewFrame.midX - sampletextFile.frame.size.width/2, y: 500, width:mainViewFrame.size.width/2 , height:  40.0)
        sampletextFile.frame = rec
        self.view.addSubview(scrollViewsample)
        scrollViewsample.addSubview(sampletextFile)

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        let notificationCenter = NotificationCenter.default
        notificationCenter.addObserver(self, selector: #selector(pattern2ViewController.handleKeyboardWillShowNotification(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        notificationCenter.addObserver(self, selector: #selector(pattern2ViewController.handleKeyboardWillHideNotification(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

    }

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

        return true
    }



    //UITextFieldが編集された直後に呼ばれる.
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

        //編集されたテキストフィールドを格納しておく
        txtActiveField = textField
        return true
    }

    func handleKeyboardWillShowNotification(_ notification: Notification) {


        let userInfo = notification.userInfo!
        //キーボードの大きさ調べる
        let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
        let myBoundSize: CGSize = UIScreen.main.bounds.size

        let scrollvalue = scrollViewsample.contentOffset.y
        scrollFormer = scrollViewsample.contentOffset.y

        //入力したテキストフィールドのy軸と高さと少し余白を足してテキストフィールドのマックスy値と少し余白のy軸をとる
        let txtLimit = txtActiveField.frame.maxY + 8.0
        let txtLimit1 = txtActiveField.frame.maxY + 8.0 - scrollvalue

        //現在のselfViewの高さから、キーボードの高さを引いて残りの幅の高さをみるy軸をみる
        let kbdLimit = myBoundSize.height - keyboardScreenEndFrame.size.height


        print("テキストフィールドの下辺:(\(txtLimit))")
        print("キーボードの上辺:(\(kbdLimit))")

        //キーボードよりテキストフィールドのy軸が大きかったらキーボードにかかっている状態。スクロールビューをその分移動させる。
        if txtLimit1 >= kbdLimit {
            scrollViewsample.contentOffset.y = txtLimit - kbdLimit
        }
    }

    func handleKeyboardWillHideNotification(_ notification: Notification) {


        //スクロールしてある位置に戻す
        scrollViewsample.contentOffset.y = scrollFormer
    }


}

좋은 웹페이지 즐겨찾기