2011-01-21 5 views
0

나는 여러 화면 입력에 많은 입력을 갖게 될 것입니다. 대신 resignFirstResponder 메시지를 보내는 몇 가지 방법으로 모든 곳에서 자신을 반복해야하는 대신에 정적 메서드를 만들 것이라고 생각했습니다. 내 루트 컨트롤러 클래스에서 하나의 함수로 모든 resignFirstReponder 요구를 해결하십시오. 그게 가능하니? 인터페이스 빌더에 루트 컨트롤러 .h 파일을 끌어다 놓을 수 없으며 거기에 클래스를 삭제하려고하면 모든 이벤트를 연결할 수 없습니다. 이벤트를 정적 인 IBAction 메서드에 연결하는 방법이 있습니까?이벤트 연결에 정적 IBAction 메소드를 사용할 수 있습니까?

편집 :

내가 달성하기 위해 노력하고있어 더 명확해야합니다. 기본적으로 텍스트 필드의 "Did End On Exit"이벤트에서 resignFirstResponder를 호출하여 키보드를 제거합니다. (이것은 올바른 방법일까요? 저는 아이폰 초보자입니다.) 다른 뷰에서이 모든 것을 사용하려고하기 때문에 각 뷰에 대해 동일한 함수를 작성하고 싶지 않았습니다. 내 루트 컨트롤러에서 각 "보기 끝내기"이벤트를 연결할 수있는 +(void) resignSomeKeyboardsOrSomething 종류의 기능을 갖고 싶습니다. 그렇게 할 수있는 방법이 있습니까? 희미한 것을 처음으로 유감스럽게 생각합니다.

답변

1

만약 내가 이것을 이해한다면, 당신은 모든 종류의 일을하는 다중 스크린을 가진 어플리케이션을 가지고 있으며,이 것들이 함수를 트리거하기를 원합니까?

내게 알림이 잘 작동 될 것 같습니다.

그럼 루트보기 컨트롤러에 정의 된 함수 인 resignMyResponder가 있다고 가정 해 보겠습니다. 다만 당신의 초기화 함수에서, 루트 뷰 컨트롤러 파일에 다음을 추가

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(resignMyResponder:) 
name:@"resignThis" 
object:nil]; 

을 그런 다음 다른 화면/파일에 간단히 수행 resignMyResponder가 호출하고자 할 때마다 :

[[NSNotificationCenter defaultCenter] 
postNotificationName:@"resignThis" object:nil]; 

resignMyResponder는 아마도 호출 될 수있는 모든 다른 상황을 처리하기 위해 꽤 복잡 할 필요가 있지만, 이는 애플리케이션의 구현에 달려있다.

+0

이것은 완전히 끝내 주지만 분명히 다른 것들을 위해 사용 하겠지만, 나는이 경우에 내가 더 복잡하게하려고 노력하는 것을 만든다고 생각합니다. 나는 내 질문에 분명하다고 생각하지 않고 더 많은 정보를 추가했다. 이 정보를 제공해 주셔서 감사합니다. 매우 귀중합니다! – Justin

0

UIResponder 불행히도 NSResponder가 이것에 관해서 명확하지 않습니다.

resignFirstResponder는

이 그 창에서 첫번째 응답자로서의 지위를 포기 에 요청되었다는 수신기를 통지합니다.

- (BOOL)resignFirstResponder

토론

기본 구현 반환 YES, 첫 번째로 반응을 상태를 사임. 서브 클래스는이 메소드를 오버라이드 (override) 해, 상태를 갱신하거나 선택의 강조를 해제하는 등의 동작을 실시하는지, 또는 NO로 리턴 해, 가 최초 응답자 상태를 포기하는 것을 거부 할 수 있습니다.

하면 2 개 종류 (죄송합니다, 그것은 늦게 어쩌면이 ... 지나치게 단순화되어 있지만)에 우리 그룹 클래스의 인스턴스 방법 : 다른 객체에서 직접 호출하기위한 것입니다

1) 방법 일부 데이터를 검색하거나 작업을 수행 할 수 있습니다. [view setNeedsDisplay:YES];

2) (구체적인) 서브 클래스에 의해 오버라이드 (override)되는 방법. 일반적으로 코드에서 이러한 메서드를 호출하지 않습니다. 오히려 Cocoa가 사용자 지정 구현을 수행하기 위해 사용자를 대신 할 의도로 Cocoa에서 사용자를 대신하여 호출됩니다. 코코아 전화 - (void)drawRect:(NSRect)frame; 당신을 위해. 특히 추상 클래스의 경우는 UIResponderNSResponder입니다.

- (BOOL)resignFirstResponder은 후자입니다.이 방법은 본질적으로 "첫 번째 응답자를 사임 하시겠습니까?"라고 묻는 코코아입니다. 당신은 예 또는 아니오로 대답합니다. 필요에 따라 자동으로 호출됩니다. 직접 호출 할 필요가 없습니다.

NSResponder 문서는 더욱 분명하다

resignFirstResponder

그것이 에 요청의 창에서 첫번째 응답자로서의 지위를 포기하고있어 그 수신기를 통지합니다.

- (BOOL)resignFirstResponder

토론

기본 구현 반환 YES, 첫 번째로 반응을 상태를 사임. 서브 클래스는이 메소드를 오버라이드 (override) 해, 상태를 갱신하거나 선택의 강조를 해제하는 등의 동작을 실시하는지, 또는 NO로 리턴 해, 가 최초 응답자 상태를 포기하는 것을 거부 할 수 있습니다.

는 사용 NSWindow 표시 makeFirstResponder: 방법이 아니라이 방법은, 객체 첫 번째 응답자 확인합니다. 절대 이 메소드를 직접 호출하십시오. 이 makeFirstResponder:에 아이폰과 동일하지만 당신을 위해 노력한다 어떤 경우

확실하지 않음 (당신은 적극적으로 새로운 뷰 첫 번째로 반응 할 수있는합니다).

관련 문제