2016-07-02 2 views
1

나는 그러나 나는 또한 내가 리턴 키를 누를 때 해고하려는 때문에 내가 화면의 아무 곳이나 눌러이를 기각하고 방법의 여러 텍스트 필드UITextField 키보드를 닫으시겠습니까?

지금이 정말 필요하지 않습니다의로
@IBOutlet var emailLogin: UITextField! 
@IBOutlet var passLogin: UITextField! 
@IBOutlet var emailSignUp: UITextField! 
@IBOutlet var passSignUp: UITextField! 

을 가지고 .

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.emailLogin.delegate = self 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard)) 
    view.addGestureRecognizer(tap) 
} 

첫 번째 질문 : 나는 단지 하나 기각 할 필요가있을 때 나는과 같이 위임을 설정합니다,하지만 난이 필요한 여러보기가 리턴 키에 해산 할 때 어떻게이 문제를 해결할 수 있습니까?

두 개의보기가 있지만 둘 다 같은 클래스를 사용합니다. 이것이 내가하려는 일에 문제가되는 것입니까?

여기

func dismissKeyboard() { 

    view.endEditing(true) 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 

에서이 키보드 만 내가 자기로 설정된 텍스트 필드에 대한 일축.

모든 정보를 제공해드립니다. I could be doing this wrong

+1

첫 번째 질문을 이해하지 못했습니다. 델리게이트를 시작하려면 모든 textFields 대리자를 'self'로 설정해야합니다. 그런 다음 델리게이트 함수에서 IBOutlet 변수에 대해'textField'를 확인하여 다른 반응을 보입니다. 그들이 어디에 있는지는 중요하지 않습니다. –

+0

위임자로 모두 설정하면. 그것은 나에게 나쁜 지시 오류를 준다. – Casey

+0

샘플 프로젝트를 만들어 GitHub 같은 것으로 만들 수 있습니까? –

답변

2
다음에 코드를 변경

하고 작동합니다 : 당신의 LoginViewController로드, 따라서 풀기로 끝날 때

@IBOutlet var emailLogin: UITextField? 
@IBOutlet var passLogin: UITextField? 
@IBOutlet var emailSignUp: UITextField? 
@IBOutlet var passSignUp: UITextField? 

emailLogin?.delegate = self 
passLogin?.delegate = self 
emailSignUp?.delegate = self 
passSignUp?.delegate = self 

IBOutlets 다른 클래스의 초기화되지 않은 편집이

nil 개체는 Swift에서 허용되지 않습니다. Xcode의 콘솔 출력에서이를 볼 수 있어야합니다. 옵션 변수를 사용하면 해당 변수가 사용되지 않습니다.

+0

굉장! 의도 한대로 작업! 정말 도움을 주셔서 감사합니다! – Casey

0

ViewControllerDelegate를 사용하여 textField 및 textView 외부의 탭을 처리합니다. textField 외부를 탭하면 키보드가 닫힙니다. 뷰 컨트롤러에 코드 아래에 넣어 :

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    super.touchesBegan(touches, withEvent:event) 
    self.view.endEditing(true) 
} 

이 작업을 처리하기 위해 지금 TapGesture를 추가 할 필요가 없습니다.

관련 문제