기록/공부기록👩🏻‍💻

[공부기록]100일_21일차

lingk 2020. 9. 27. 19:55

키보드가 화면을 가릴때 해결

 

이번에도 노티피케이션과 노티피케이션을 이용한다❗️❗️

 

viewDidLoad에서 노티피케이션 옵저버를 등록해줬다

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)

selector에는 작동할 함수가 들어간다😊

 

keyboardWillShowNotification는 키보드 표시 직전에 post되고, keyboardWillHideNotification 키보드가 내려가기 직전에 post된다

키보드 표시 직전에 keyboardWillShow함수를 호출하여 현재 뷰의 y값을 -200하여 뷰를 위로 올려주었다

키보드가 내려가기 직전에는 keyboardWillHide함수를 호출하여 뷰의 위치를 제자리로 돌려주었다

    //뷰를 올려주는 작업
    @objc func keyboardWillShow(_ sender: Notification) {
        
        self.view.frame.origin.y = -200 // Move view 200 points upward
        
    }
    //원래 제자리로 돌려주는 작업
    @objc func keyboardWillHide(_ sender: Notification) {

        self.view.frame.origin.y = 0 // Move view to original position

    }

 

addObserver로 등록을 해줬으면 해제도 해주어야 한다🧐

viewWillDisappear에서 unregisterForKeyboardNotifications함수를 호출해서

뷰가 사라지기 직전에 키보드 노티피케이션을 해제시켜주었다❗️

    func unregisterForKeyboardNotifications() {
      NotificationCenter.default.removeObserver(self, name:UIResponder.keyboardWillShowNotification, object: nil)
      NotificationCenter.default.removeObserver(self, name:UIResponder.keyboardWillHideNotification, object: nil)
    }

 

이렇게 하니까 생긴 문제,,,,,,,,

버킷리스트를 작성할 때에도 키보드가 올려오기 때문에 노티피케이션에 신호를 준다😭😭😭

그래서 이때에도 화면이 올라가고 오류생김🤬🤬🤬😡😡🤬🤬

그렇다면,,,노티피케이션을 키보드가 올라갈때가 아니라 텍스트뷰를 편집할때 옵저버를 등록해준다면 되지 않을까?!?!

라는 생각을 시작으로❗️ textView가 편집되기 시작하거나 끝나는 시점에 뷰의 위치를 변경시켜 주었다

하지만,,,,뭔가 이후로 문제가 많이 생겼다,,,,,,사진에 접근하거나 완료버튼을 누르거나

어떤 버튼을 누를때 갑자기 멈춰버린다,,,,,,,,,,🤬🤬🤬🤬🤬

    func textViewDidBeginEditing(_ textView: UITextView) {
        if view.frame.origin.y == 0 {
            self.view.frame.origin.y -= 200
        }
    }
    func textViewDidEndEditing(_ textView: UITextView) {
        if view.frame.origin.y != 0 {
                self.view.frame.origin.y = 0
        }
    }

 

마지막 해결책은 키보드를 done버튼을 눌렀을 때에만 내려주는거??!?!

내일 다시,,,,,,시도

 

노티피케이션센터와 노티피케이션에 대해서도 복습+발표준비,,,

반응형

'기록 > 공부기록👩🏻‍💻' 카테고리의 다른 글

[공부기록]100일_23일차  (0) 2020.09.29
[공부기록]100일_22일차  (0) 2020.09.28
[공부기록]100일_20일차  (0) 2020.09.26
[공부기록]100일_19일차  (0) 2020.09.25
[공부기록]100일_18일차  (0) 2020.09.24