ํคํจ๋๊ฐ ํ์ฑํ ๋์ด ์ฌ๋ผ์์ ๋ TextField๊ฐ ๊ฐ๋ ค์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์
๋ค์ํ ๋ฐฉ๋ฒ๋ค์ด ์์ง๋ง, NotificationCenter์ ์ฌ์ฉํด์ ํด๊ฒฐํด๋ณด์:)
์ํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
PROCESS
TextField์ ํ์ ํคํจ๋๊ฐ ์ฌ๋ผ์ด (*์์ฌ๋ผ์ค๋ ๊ฒฝ์ฐ : Cmd + Shift + k)
-> NotificationCenter๋ฅผ ํตํด ํคํจ๋๊ฐ ์ฌ๋ผ์ด์ ์ฑ์ด ์ธ์ง
-> ๊ฐ๋ ค์ง TextField๊ฐ ๋ณด์ด๋๋ก ํ๋ฉด์ด ์ฌ๋ผ๊ฐ
-> TextField์ ๊ฐ ์ ๋ ฅ ํ ํคํจ๋ ๋ด๋ฆผ (ํ๋ฉด ํฐ์น or Done ํด๋ฆญ)
-> ํคํจ๋๊ฐ ๋ด๋ ค๊ฐ์ NotificationCenter๋ฅผ ํตํด ์ฑ์ด ์ธ์ง
-> ํ๋ฉด ์์๋ณต๊ท
1. NotificationCenter - Observer ๋ฑ๋ก
ํคํจ๋๊ฐ ํ์ฑํ ๋๋์ง ์๋๋์ง ํ์งํ observer๋ฅผ ๋ฑ๋กํ๊ธฐ ์ํด ์๋ ์ฝ๋๋ฅผ ViewDidLoad() ์์ ์์ฑํฉ๋๋ค.
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
// Register Keyboard notifications
// addObserver๋ฅผ ํตํด ์ต์ ๋ฒ๋ฅผ ์ค์ ํ ๋์์ ๋ทฐ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด(self)๋ก ์ง์
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillHide(_:)),
name: UIResponder.keyboardWillHideNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillShow(_:)),
name: UIResponder.keyboardWillShowNotification,
object: nil)
}
addObserver์์ UIResponder.keyboardWillHideNotification์ด๋ผ๋ ์ด๋ฆ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด,
self(๋ทฐ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด)๊ฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ,
์ฒ๋ฆฌํ ๋ด์ฉ์ keyboardWillHide(_:)๋ผ๋ ํจ์์ ๋ด๊ฒจ ์์ต๋๋ค.
2. ์คํ ํจ์ ์ ์
ํด๋น ์ต์ ๋ฒ(addObserver) ์คํ์ ์ฒ๋ฆฌํ ํจ์์ ์ ์ํฉ๋๋ค.
ํค๋ณด๋๊ฐ ๋ํ๋จ๊ณผ ๋์์ ํ๋ฉด์ด ์ฌ๋ผ๊ฐ๋ keyboardWillShow์
ํค๋ณด๋๊ฐ ๋ด๋ ค๊ฐ๊ณผ ๋์์ ํ๋ฉด์ด ์๋๋๋ก ๋์์ค๋ keyboardWillHide๋ฅผ ์ ์ํ์์ต๋๋ค.
//ํค๋ณด๋ ์ฌ๋ผ๊ฐ๋ค๋ ์๋ฆผ์ ๋ฐ์ผ๋ฉด ์คํ๋๋ ๋ฉ์๋
@objc func keyboardWillShow(_ sender:Notification){
self.view.frame.origin.y = -150
}
//ํค๋ณด๋ ๋ด๋ ค๊ฐ๋ค๋ ์๋ฆผ์ ๋ฐ์ผ๋ฉด ์คํ๋๋ ๋ฉ์๋
@objc func keyboardWillHide(_ sender:Notification){
self.view.frame.origin.y = 0
}
- keyboardWillShow : view์ y์ขํ๋ฅผ 150๋งํผ ์ฌ๋ ค์ฃผ์ด TextField๊ฐ ๋ณด์ด๊ฒ
- keyboardWillHide : view๋ฅผ ์๋์์น๋ก
3. TextField ์ ๋ ฅ์ด ๋๋ฌ์์ ์๋ฆผ
์ ๋ ฅ์ด ์๋ฃ๋์๋ค๋ ์๋ฆฌ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
1) ํ๋ฉด ํฐ์นํ์ฌ ํคํจ๋ ๋ด๋ฆฌ๊ธฐ
ํคํจ๋๋ถ๋ถ์ ์ ์ธํ ํ๋ฉด์ ํฐ์นํ์ฌ ์ ๋ ฅ์ด ์๋ฃ๋์์์ ์๋ฆฝ๋๋ค.
์ด ์ฒ๋ฆฌ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ํ๋ ViewController์ ์๋ ์ฝ๋ ์ฝ์ ํ๋ฉด ํด๊ฒฐ!
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
self.view.endEditing(true)
}
2) ํคํจ๋์ Done ๋ฒํผ ํด๋ฆญํ์ฌ ํคํจ๋ ๋ด๋ฆฌ๊ธฐ
์ด ๋์๋ฅผ ์ํํ๊ธฐ ์ํด์๋ ๋จผ์ UITextFieldDelegate ํ๋กํ ์ฝ์ ์ค์ํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ viewDidLoad() ์์ ์๋ ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ์ฐ๊ฒฐ์์ผ์ค textField์ delegate๋ฅผ ์ค์ !
textField.delegate = self
delegate๋ฅผ ์ค์ ํ Viewcontroller ์์ ์๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ฉด,
ํคํจ๋์์ Done, Enter ๋ฑ ์๋ฃํค๋ฅผ ํด๋ฆญํ์ฌ ์ ๋ ฅ์ด ์๋ฃ๋์์์ ์๋ฆฝ๋๋ค.๐ป
func textFieldShouldReturn(_ textField: UITextField) -> Bool{
textField.resignFirstResponder()
return true
}