사용자가 화면의 아무 곳이나 두 드렸을 때 텍스트 필드를 닫을 코드를 재사용하고 싶습니다. 나는 단일 책임 원칙을 따르려고 노력하고 있으므로이 기능을 수퍼 클래스에 넣고 상속받는 것이 좋지 않은 것처럼 보입니다.텍스트 필드 재사용 - 코드 재사용
이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
이 솔루션은 단지 기분하지 않습니다 깔끔하게 함께 맞는 여기
내가 현재 가지고있는 것입니다 . 이것을 달성하기 위해 노력하는 더 정확한 방법은 무엇입니까?
팁 주셔서 감사합니다. 불행히도 becomeFirstResponder는 resignFirstResponder를 강요하지 않는다. –
클래스가'resignOnTap'을 가질 것으로 기대된다면, 다른 모든 뷰 컨트롤러가 파생되는'UIViewController' 서브 클래스를 만드는 것이 아닌가? –
그건 내가해야 할 일이다. 이미 모든 뷰 컨트롤러가 파생 된 UIViewController 하위 클래스가 있는데,이 기능을 추가하면이 기능을 사용하지 않는보기 컨트롤러에서 예상치 못한 문제가 발생할 수 있다는 점만 염려했습니다. 그리고 하위 클래스가 기본 클래스의 모든 기능을 원한다는 원칙을 깨 트려서 무서워했습니다. –