티스토리 뷰
안녕하세요 :) Zedd입니다.
오늘은 TextField에 대해서 배워볼건데요 :)
TextField를 쓰다보면 반드시 접하는 이슈..!
바로
이 문제죠.
바로 키보드에 의해 TextField가 가려지는 현상입니다.
간단하게 오늘 할 것을 말씀드리면,
키보드에 의해 TextField가 가려지는 현상을 해결하는 거에요.
키보드에의해 텍스트필드가 가려지는 것을 해결
결과적으로 우리는 TextField가 키보드에의해 안가려졌으면 하죠?
그러면 TextField를 올렸다가, 편집이 끝나면 올렸던 TextField를 다시 내리면됩니다.
class ViewController: UIViewController ,UITextFieldDelegate{
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
}
NotificationCenter를 이용해서 키보드가 이제 올라간다, 키보드 이제 사라질거야!! 라는 것을 알려줄거에요.
저 name에 해당하는게 .UIKeyboardWillShow죠? 저 name파라미터는 옵저버를 등록할 알림의 이름입니다.
만약 키보드가 이제 보여질거야! 하면 옵저버에게 알려주고, selector에 있는 함수가 실행되게 되죠.
그럼 우리는 이제 키보드가 나타날거야!! 하면 뭘 해주면 될까요?
네. TextField를 올려주면 되겠죠?
keyboardWillShow()함수에는 TextField를 올려주는 작업을 하면 되겠네요.
@objc
func keyboardWillShow(_ sender: Notification) {
self.view.frame.origin.y = -150 // Move view 150 points upward
}
헷갈릴 수도 있는 것은 -150하면 내려가는거 아냐? 라고 생각하실 수도 있는데..
-150을 할당해주는 곳을 보세요. 현재 view의 y좌표를 편집해주는 것인데, 당연히 마이스값을 넣어줘야 위로 view가 올라가겠죠?
저 값은 본인의 앱에 맞게 고쳐주시면 된답니다.
이제 키보드를 내려줄 차례네요.
각자 키보드를 내릴 특정한 상황이 있을 텐데, 키보드가 내려갈때는 당연히
이 메소드가 불리게 됩니다.
@objc
func keyboardWillHide(_ sender: Notification) {
// Code
}
우리는 아까 keyboardWillShow()함수를 통해서 뷰의 y좌표에 마이너스 값을 대입하여 뷰를 올려주었어요.
그럼 이 뷰를 내릴려면 어떻게하면 될까요?
네. 다시 원래 있던 자리로 돌려주면 되겠죠?
@objc
func keyboardWillHide(_ sender: Notification) {
self.view.frame.origin.y = 0 // Move view to original position
}
짠, y값을 다시 0으로 만들어주었어요:)
자 이제 실행해보면,
이렇게 TextField가 올라감으로써 키보드에 안가려지는 것을 볼 수 있죠?
전체 소스코드도 첨부합니다. ㅎㅎ
어떠신가요 :) 쉽죠?
도움이 되었으면 좋겠습니다 ㅎㅎ
'iOS' 카테고리의 다른 글
- Combine
- Accessibility
- np-complete
- WKWebView
- swift3
- FLUTTER
- 회고
- swift delegate
- github
- SwiftUI
- Xcode
- swift tutorial
- swift 공부
- IOS
- WWDC
- Swift
- 스위프트
- np-hard
- Git
- swift array
- swift sort
- fastlane
- actor
- 제이슨 파싱
- 피아노
- 스위프트 문법
- UIBezierPath
- iOS delegate
- WidgetKit
- ios 13
- Total
- Today
- Yesterday