iOS

iOS ) TextField간 이동시 키보드에 가려지지 않도록(?) 화면 올리기..

유사앱등이 2023. 6. 20. 15:10

대체 제목 뭐라고 지어요..

화면에 여러 개의 텍스트필드가 있는 경우 & textFieldShouldReturn 메서드 사용하여 다른 텍스트필드로 이동하는 경우,

위치에 따라 키보드 때문에 가려지는 경우가 있음..

키보드 위로 해당 텍스트필드가 오도록 화면을 올려버리자 하고 만들어보았다..

 override func viewDidLoad() {
    super.viewDidLoad()
	view.backgroundColor = .white
	firstInputField.delegate = self
	secondInputField.delegate = self
	buildViewHierarchy()
	setupConstraints()
	setupUI()
	setupTap()
	
	//Set Observer to scroll when keyboard shows
	NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
	NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}

 

 

@objc func keyboardWillShow(notification: NSNotification) {
	if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
		let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
		scrollView.contentInset = contentInsets
		scrollView.scrollIndicatorInsets = contentInsets
		
		if secondInputField.isFirstResponder {
			let rect = scrollView.convert(secondInputField.frame, from: secondInputField.superview)
			scrollView.scrollRectToVisible(rect, animated: true)
		}
	}
}
	
@objc func keyboardWillHide(notification: NSNotification) {
	let contentInsets = UIEdgeInsets.zero
	scrollView.contentInset = contentInsets
	scrollView.scrollIndicatorInsets = contentInsets
}

 

키보드 옵저버 달아주고.. 액션 만들어주면.. 끝

키보드 사이즈 계산해서 올려주면.. 됨...

이 끝은 아니고

이걸 만들기 위해..

스크롤뷰를 만들어서 UI 요소들을 다 때려넣어줬음..

스크롤뷰를 만드는 방법은... 생략...

 

예시의 경우 텍스트필드가 2개밖에 없고 1번 텍스트필드는 가려질 리가 없어서....? 아마도......?

2에만 적용시켜주었지만,

텍스트필드가 더 많이 있을 경우 동일한 방법으로 적용시켜주면 될 듯

 

나중에 또 까먹을 것이 분명하여 기록해두는 포스팅,,