2009-07-11 2 views
1

iPhone 용 Hello World 응용 프로그램을 구현하려고하는데 일부 작업을했습니다. 그러나 나는 키보드가 사라지게하는 방법을 알아낼 수 없습니다. 나는 this을 보았고 아무 도움도되지 않습니다. (저는 제 코드에서 resignFirstResponder를 가졌습니다). 관련 텍스트 필드를 파일 소유자에게 대리인으로 연결했습니다. 여기에 키보드가 퀘스 트 로그에서 사라질할지 여부를 결정하는 코드입니다 :iPhone에서 "완료"를 누르면 키보드가 사라지지 않습니다.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == textField) 
    { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

나는이 엄청나게 명백해야한다 확신 해요,하지만 난 답을 찾을 수 없습니다. 도와 주셔서 미리 감사드립니다.

답변

4

우선 먼저 텍스트 필드의 델리게이트를 텍스트 소유자의 델리게이트 대신 파일 소유자에게 연결해야합니다. 혼란 스러울 지 모르지만 인터페이스 빌더에서 텍스트 필드를 선택하고 파일 소유자의 "위임"연결 지점을 확인하면 쉽게 확인할 수 있습니다.

다음 코드에서 if 문을 꺼내면 어떻게 될까요? 텍스트 소유자의 델리게이트를 파일의 소유자와 연결 한 다음 코드를 다음과 같이 변경하십시오.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
}

원하는 결과를 얻을 수 있어야합니다.

여전히 작동하지 않으면 해당 소유자의 클래스가 구현 된 해당 메소드와 동일한 지 확인하십시오. 예를 들어, 코드가 RootViewController.m에 있으면 다음과 같이 지정해야합니다. 파일의 소유자는 Interface Builder에서 RootViewController의 인스턴스입니다.

+0

저는 위임자에 대해 명확하지 않다라고 생각합니다. 네가 지정한대로 배선했습니다. 어떤 이유로 if 문을 제거하면 문제가 해결되었습니다. 감사! – RCIX

0

코드

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == textField) 
    { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

일종의 실패한다.

당신은 대리자 메서드의 매개 변수에 resignFirstResponder를 호출하지 않았습니다. 인스턴스 변수라고 가정합니다. 이것은 다음과 같이 작성되었을 것입니다 :

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == [self textField]) { 
     [theTextField resignFirstResponder]; 
    } 
    return YES; 
} 
+0

물론 제공된 코드를 사용하려면 textField가 속성이어야합니다. 실제로 인스턴스 변수와 통신해서는 안됩니다. 그것이 속성입니다. 속성은 인스턴스 변수에 대한 일을 할 수 있도록 멋지고 행복하며 메모리가 관리되는 캡슐화를 제공합니다. –

관련 문제