Я уже некоторое время бьюсь головой о стены, и все же мне не удалось решить эту проблему.
У меня есть modalViewController с UITextField (назовем его myTroubleMaker) и несколькими другими не важными компонентами. Когда я загружаю modalVC, я запускаю UITextField и сразу позволяю ему стать первым ответчиком, а также я устанавливаю его делегат для modalVC (self).
ModalView прекрасно загружается с акцентом на UITextField и открытием клавиатуры сразу.
Но когда я касаюсь / щелкаю в любом месте экрана, клавиатура не исчезает. Он отключает фокус от UITextField и подает в отставку firstResponder, но клавиатура не выключается.
Что вызывает эту неприятную проблему? Как я могу исправить это правильно?
Код:
.h
@interface myModalViewController : UIViewController <UItextFieldDelegate>
{
UITextField *myTroubleMaker;
}
@property (nonatomic, retain) UITextField *myTroubleMaker;
@end
.m
//I synthesized it properly
-(void)loadView
{
[super loadView];
self.myTroubleMaker = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 50)];
self.myTroubleMaker.backgroundColor = [UIColor clearColor];
self.myTroubleMaker.textColor = [UIColor whiteColor];
self.myTroubleMaker.text = @"";
self.myTroubleMaker.font = [UIFont systemFontOfSize:self.myTroubleMaker.frame.size.height - 8];
self.myTroubleMaker.adjustsFontSizeToFitWidth = YES;
self.myTroubleMaker.minimumFontSize = 0.0;
self.myTroubleMaker.textAlignment = UITextAlignmentCenter;
self.myTroubleMaker.autocorrectionType = UITextAutocorrectionTypeNo;
self.myTroubleMaker.delegate = self;
self.myTroubleMaker.placeholder = @"I eat ur brainz, yoh!";
self.myTroubleMaker.keyboardType = UIKeyboardTypeDefault;
self.myTroubleMaker.returnKeyType = UIReturnKeyDone;
[self.view addSubview:self.tabNameInputField];
[self.myTroubleMaker becomeFirstResponder];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
self.tabNameInputField.text = @"";
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
{
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == someOtherModalVCComponent) {
//do stuff
if([self.tabNameInputField isFirstResponder])
{
[self.tabNameInputField resignFirstResponder];
}
[self loadGraphics];
}
if ([touch view] != self.myTroubleMaker)
{
if([self.myTroubleMaker isFirstResponder])
{
[self.myTroubleMaker resignFirstResponder];
}
}
}
Все работает так, как я хочу, за исключением этой проблемы с клавиатурой.
Даже когда я писал этот вопрос, я проверял похожие проблемы на возможные решения.
Любая помощь будет оценена. У меня тут болит голова ...
Решено решением, которое я принял ниже.
Для будущих ссылок я использовал devforums.apple.com / message / 425914 , чтобы получить свое конкретное решение. Поскольку я передавал modalVC с навигационным контроллером, мне нужно было создать категорию для UINavigationController и добавить в нее свой метод, чтобы он поддерживал автоматическое отключение клавиатуры.