2014-10-30 2 views
1

사용자가 화면의 아무 곳이나 두 드렸을 때 텍스트 필드를 닫을 코드를 재사용하고 싶습니다. 나는 단일 책임 원칙을 따르려고 노력하고 있으므로이 기능을 수퍼 클래스에 넣고 상속받는 것이 좋지 않은 것처럼 보입니다.텍스트 필드 재사용 - 코드 재사용

TextFieldResigner.m가 :

@implementation TextFieldResigner 

+ (void)autoDismissTextFieldsFromViewController:(UIViewController *)viewController { 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:viewController action:@selector(resignOnTap)]; 
    [singleTap setNumberOfTapsRequired:1]; 
    [singleTap setNumberOfTouchesRequired:1]; 
    [viewController.view addGestureRecognizer:singleTap]; 
} 

@end 

내보기 컨트롤러 클래스 :

@interface EnrollQuestionsViewController() 

@end 

@implementation EnrollQuestionsViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [TextFieldResigner autoDismissTextFieldsFromViewController:self]; 
} 

- (void)resignOnTap { 
    [_myTextField resignFirstResponder]; 
} 

@end 

이 솔루션은 단지 기분하지 않습니다 깔끔하게 함께 맞는 여기

내가 현재 가지고있는 것입니다 . 이것을 달성하기 위해 노력하는 더 정확한 방법은 무엇입니까?

답변

1

이 솔루션은 오류가 발생하기 쉽습니다. UIViewController 클래스의 개체를 수락하고 사용자에게 resignOnTap 사용자 지정자가 있어야합니다.

덧붙여서 귀하의 autoDismissTextFieldsFromViewController: 선택자는 오해의 소지가 있습니다. UIGestureRecognizers에 등록하면 결국 텍스트 필드를 자동으로 닫습니다. 그것의 이름은 그 자체가 텍스트 필드를 없앨 것을 제안합니다.

YEScanBecomeFirstResponder에서 반환하는 개체의 becomeFirstResponder을 호출하면 이전의 첫 번째 응답자에서 자동으로 resignFirstResponder이 실행됩니다.

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(becomeFirstResponder)]]; 

을하고 뷰 컨트롤러에이 추가 : 당신은 당신의 viewDidLoad에 넣고 수

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

당신은 당신을 위해이 일을하는 UITapGestureRecognizer를 사용할 때주의해야합니다. 다른 UITapGestureRecognizer이 화면에 있으면 UIGestureRecognizerDelegate 구현 (있는 경우)에 따라 탭이 실행되지 않을 수 있습니다.

+0

팁 주셔서 감사합니다. 불행히도 becomeFirstResponder는 resignFirstResponder를 강요하지 않는다. –

+0

클래스가'resignOnTap'을 가질 것으로 기대된다면, 다른 모든 뷰 컨트롤러가 파생되는'UIViewController' 서브 클래스를 만드는 것이 아닌가? –

+0

그건 내가해야 할 일이다. 이미 모든 뷰 컨트롤러가 파생 된 UIViewController 하위 클래스가 있는데,이 기능을 추가하면이 기능을 사용하지 않는보기 컨트롤러에서 예상치 못한 문제가 발생할 수 있다는 점만 염려했습니다. 그리고 하위 클래스가 기본 클래스의 모든 기능을 원한다는 원칙을 깨 트려서 무서워했습니다. –