Swift를 사용하여 아무 곳이나 터치하여 iOS 키보드 닫기
이것을 찾아 헤맸는데 찾을 수가 없네요.다음을 사용하여 키보드를 해제하는 방법을 알고 있습니다.Objective-C하지만 나는 그것을 어떻게 사용하는지 모릅니다.Swift아는 사람?
override func viewDidLoad() {
super.viewDidLoad()
//Looks for single or multiple taps.
let tap = UITapGestureRecognizer(target: self, action: #selector(UIInputViewController.dismissKeyboard))
//Uncomment the line below if you want the tap not not interfere and cancel other interactions.
//tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
//Calls this function when the tap is recognized.
@objc func dismissKeyboard() {
//Causes the view (or one of its embedded text fields) to resign the first responder status.
view.endEditing(true)
}
이 기능을 여러 개로 사용할 경우 이 작업을 수행하는 다른 방법은 다음과 같습니다.UIViewControllers:
// Put this piece of code anywhere you like
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
이제 모든 곳에서UIViewController할은 이입니다: 함수를호하만면됩니다이기출하."
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
}
이 기능은 이와 같이 유용한 Swift Extensions가 많이 포함된 my repo에 표준 기능으로 포함되어 있습니다. https://github.com/goktugyil/EZSwiftExtensions 에서 확인하십시오.
아래의 Swift를 사용하여 Xcode 6.1에서 키보드를 해제하는 방법에 대한 답변:
import UIKit
class ItemViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var textFieldItemName: UITextField!
@IBOutlet var textFieldQt: UITextField!
@IBOutlet var textFieldMoreInfo: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textFieldItemName.delegate = self
textFieldQt.delegate = self
textFieldMoreInfo.delegate = self
}
...
/**
* Called when 'return' key pressed. return NO to ignore.
*/
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
/**
* Called when the user click on the view (outside the UITextField).
*/
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
}
Swift 4 작동 중
아래와하고 전화를 .hideKeyboardWhenTappedAround()기본 보기 컨트롤러에 있습니다.
//
// UIViewController+Extension.swift
// Project Name
//
// Created by ABC on 2/3/18.
// Copyright © 2018 ABC. All rights reserved.
//
import UIKit
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tapGesture = UITapGestureRecognizer(target: self,
action: #selector(hideKeyboard))
view.addGestureRecognizer(tapGesture)
}
@objc func hideKeyboard() {
view.endEditing(true)
}
}
모든 뷰 컨트롤러에서 항상 호출할 필요가 없도록 기본 뷰 컨트롤러를 호출하는 것이 가장 중요합니다.
전화할 수 있습니다.
resignFirstResponder()
UI 응답자의 인스턴스(예: UItextField).현재 키보드가 표시되는 원인이 되는 보기에서 호출하면 키보드가 해제됩니다.
swift 5 단 두 줄로 충분합니다.에 추가viewDidLoad작동해야 합니다.
let tapGesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing))
view.addGestureRecognizer(tapGesture)
탭 제스처로 인해 다른 터치가 차단된 경우 다음 행을 추가합니다.
tapGesture.cancelsTouchesInView = false
스위프트 3의 경우 매우 간단합니다.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
RETURN 키를 누를 때 키보드를 숨기려는 경우
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
그러나 두 번째 경우에는 모든 textFields에서 기본의 ViewController로 위임자를 전달해야 합니다.스토리보드
//Simple exercise to demonstrate, assuming the view controller has a //Textfield, Button and a Label. And that the label should display the //userinputs when button clicked. And if you want the keyboard to disappear //when clicken anywhere on the screen + upon clicking Return key in the //keyboard. Dont forget to add "UITextFieldDelegate" and
//"self.userInput.delegate = self" as below
import UIKit
class ViewController: UIViewController,UITextFieldDelegate {
@IBOutlet weak var userInput: UITextField!
@IBAction func transferBtn(sender: AnyObject) {
display.text = userInput.text
}
@IBOutlet weak var display: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//This is important for the textFieldShouldReturn function, conforming to textfieldDelegate and setting it to self
self.userInput.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//This is for the keyboard to GO AWAYY !! when user clicks anywhere on the view
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
//This is for the keyboard to GO AWAYY !! when user clicks "Return" key on the keyboard
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Swift 3: 키보드를 제거하는 가장 쉬운 방법:
//Dismiss keyboard method
func keyboardDismiss() {
textField.resignFirstResponder()
}
//ADD Gesture Recignizer to Dismiss keyboard then view tapped
@IBAction func viewTapped(_ sender: AnyObject) {
keyboardDismiss()
}
//Dismiss keyboard using Return Key (Done) Button
//Do not forgot to add protocol UITextFieldDelegate
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
keyboardDismiss()
return true
}
신속하게 사용할 수 있습니다.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
view.endEditing(true)
}
코드 한 줄만 입력합니다.viewDidLoad()방법:
view.addGestureRecognizer(UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:))))
Dash의 대답은 정확하고 선호됩니다.에 그을린 은 더에불그린지구같다습니다접음과근은을법다▁is"같▁a니라고 부르는 것입니다.view.endEditing(true)이것이 원인입니다.view그리고 그것의 모든 개요.resignFirstResponder무시하고 싶은 뷰에 대한 참조가 없는 경우, 이것은 진부하지만 효과적인 해결책입니다.
개인적으로 저는 당신이 첫 번째 응답자를 사임하고 싶은 견해에 대한 참조가 있어야 한다고 생각합니다.
.endEditing(force: Bool)야만적인 접근입니다. 사용하지 마십시오.
저는 @Esqarrouth의 수락된 답변과 약간의 조정이 포함된 최상의 솔루션을 발견했습니다.
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboardView")
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
func dismissKeyboardView() {
view.endEditing(true)
}
}
인tap.cancelsTouchesInView = false매우 중요했습니다: 그것은 그것을 보장합니다.UITapGestureRecognizer보기의 다른 요소가 사용자 상호 작용을 수신하는 것을 방지하지 않습니다.
»dismissKeyboard()약간 덜 우아한 것으로 바뀌었습니다.dismissKeyboardView()이것은 제 프로젝트의 꽤 오래된 코드베이스에서, 수많은 시간들이dismissKeyboard()이미 사용되고 있습니다(이것은 드문 일이 아닙니다). 컴파일러 문제가 발생했습니다).
그러면 위와 같이 개별 View 컨트롤러에서 이 동작을 사용할 수 있습니다.
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
}
스토리보드:
- 테이블 보기를 선택합니다.
- 오른쪽에서 속성 검사자를 선택합니다.
- 키보드 섹션 - 원하는 해제 모드를 선택합니다.
스위프트 3:
가 장사용인 Selector해제 함수에서 추가적인 작업을 수행할 수 있는 매개 변수로서.cancelsTouchesInView뷰의 다른 요소를 터치하여 왜곡을 방지합니다.
extension UIViewController {
func hideKeyboardOnTap(_ selector: Selector) {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: selector)
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
}
용도:
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardOnTap(#selector(self.dismissKeyboard))
}
func dismissKeyboard() {
view.endEditing(true)
// do aditional stuff
}
저는 키보드용으로 IQKeyBoardManagerSwift를 사용했습니다.사용하기 쉽습니다.포드 추가만'IQ 키보드 관리자Swift'
및 IQKeyboardManagerSwift에 didFinishLaunchingWithOptionsAppDelegate.
///add this line
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
IQKeyboardManager.shared.enable = true
Esqarrough의 답변을 확장하기 위해 키보드를 해제할 때 항상 다음을 사용합니다. 특히 키보드를 해제하는 클래스에 속성이 없거나 의 하위 클래스가 아닌 경우에는 더욱 그렇습니다.
UIApplication.shared.keyWindow?.endEditing(true)
편의상, 리고편의상, ▁to▁▁following다▁and니같▁the습ience,▁conven,,다음▁for.UIApplcation 명령어:
extension UIApplication {
/// Dismisses the keyboard from the key window of the
/// shared application instance.
///
/// - Parameters:
/// - force: specify `true` to force first responder to resign.
open class func endEditing(_ force: Bool = false) {
shared.endEditing(force)
}
/// Dismisses the keyboard from the key window of this
/// application instance.
///
/// - Parameters:
/// - force: specify `true` to force first responder to resign.
open func endEditing(_ force: Bool = false) {
keyWindow?.endEditing(force)
}
}
쉽게 해결할 수 있는 IQ 키보드 관리자를 사용하십시오.
/////////////////////////////////////////
![ 키보드를 비활성화하는 방법..][1]
import UIKit
class ViewController: UIViewController,UITextFieldDelegate {
@IBOutlet weak var username: UITextField!
@IBOutlet weak var password: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
username.delegate = self
password.delegate = self
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
textField.resignFirstResponder()
return true;
}
override func touchesBegan(_: Set<UITouch>, with: UIEvent?) {
username.resignFirstResponder()
password.resignFirstResponder()
self.view.endEditing(true)
}
}
스크롤 뷰를 사용하면 훨씬 간단할 수 있습니다.
선택하기만 하면 됩니다.Dismiss interactively스토리보드로
이 확장을 View 컨트롤러에 추가합니다.
extension UIViewController {
// Ends editing view when touches to view
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
self.view.endEditing(true)
}
}
Swift 4에서 @objc를 추가합니다.
DidLoad 보기에서:
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
view.addGestureRecognizer(tap)
기능:
@objc func dismissKeyboard() {
view.endEditing(true)
}
import UIKit
class ItemViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var nameTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.nameTextField.delegate = self
}
// Called when 'return' key pressed. return NO to ignore.
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
// Called when the user click on the view (outside the UITextField).
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
}
초보 프로그래머로서 사람들이 더 숙련되고 불필요한 반응을 만들어낼 때 혼란스러울 수 있습니다.위에 표시된 복잡한 작업을 수행할 필요가 없습니다!...
여기 가장 간단한 옵션이 있습니다...키보드가 텍스트 필드에 응답하여 나타나는 경우 - 터치 스크린 기능 안에 resignFirstResponder 기능을 추가하면 됩니다.아래 그림과 같이 - 첫 번째 응답기가 해제되어(응답기 체인에서 나가기) 키보드가 닫힙니다...
override func touchesBegan(_: Set<UITouch>, with: UIEvent?){
MyTextField.resignFirstResponder()
}
이 라이너 하나가 UI 보기의 모든 UI 텍스트 필드에서 키보드를 사임합니다.
self.view.endEditing(true)
@King-Wizard님의 답변에 대한 제 편집이 거부된 이후 새로운 답변으로 게시.
클래스를 UITextField의 대리자로 만들고 터치 오버라이드가 시작되었습니다.
스위프트 4
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
//Called when 'return' key is pressed. Return false to keep the keyboard visible.
func textFieldShouldReturn(textField: UITextField) -> Bool {
return true
}
// Called when the user clicks on the view (outside of UITextField).
override func touchesBegan(touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
}
스위프트3용
viewDidLoad에서 이벤트 인식자 등록
let tap = UITapGestureRecognizer(target: self, action: #selector(hideKeyBoard))
그런 다음 동일한 보기 DidLoad의 보기에 제스처를 추가해야 합니다.
self.view.addGestureRecognizer(tap)
그러면 등록된 방법을 초기화해야 합니다.
func hideKeyBoard(sender: UITapGestureRecognizer? = nil){
view.endEditing(true)
}
다음은 Swift 5를 사용하여 다른 곳을 두 줄로 눌러 키보드를 해제하는 방법입니다.
(다른 대답을 덧붙이기는 싫지만, 이것이 구글에서 최고의 결과이기 때문에 저와 같은 신인들을 도울 것입니다.)
ViewController.swift에서 다음을 찾습니다.viewDidLoad()기능.
다음 두 줄을 추가합니다.
let tap: UIGestureRecognizer = UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing))
view.addGestureRecognizer(tap)
또한 탭 제스처 인식기를 추가하여 키보드를 다시 사용할 수 있습니다. :D
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let recognizer = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
backgroundView.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer) {
textField.resignFirstResponder()
textFieldtwo.resignFirstResponder()
textFieldthree.resignFirstResponder()
println("tappped")
}
다른 가능성은 터치해야 할 모든 보기 아래에 있는 콘텐츠 없이 큰 단추만 추가하는 것입니다.다음과 같은 작업을 수행합니다.
@IBAction func dismissKeyboardButton(sender: AnyObject) {
view.endEditing(true)
}
제스처 인식기의 문제는 ViewCells 테이블에서 받고 싶은 모든 터치를 포착한다는 것이었습니다.
터치를 수신해야 하는 다른 보기가 있는 경우 설정해야 합니다.cancelsTouchesInView = false
다음과 같이:
let elsewhereTap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
elsewhereTap.cancelsTouchesInView = false
self.view.addGestureRecognizer(elsewhereTap)
override func viewDidLoad() {
super.viewDidLoad()
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))
}
func tap(sender: UITapGestureRecognizer){
print("tapped")
view.endEditing(true)
}
사용해 보세요, 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/24126678/close-ios-keyboard-by-touching-anywhere-using-swift
'programing' 카테고리의 다른 글
| 이클립스에 가장 적합한 JVM 설정은 무엇입니까? (0) | 2023.05.02 |
|---|---|
| PowerShell의 가상 환경? (0) | 2023.05.02 |
| Postgre에서 제약 조건 이름 업데이트SQL (0) | 2023.05.02 |
| 상수 배열 선언 (0) | 2023.05.02 |
| Azure 기능 로컬 호스트에 대한 CORS 구성 (0) | 2023.05.02 |
