UITextField не отказывается от клавиатуры - PullRequest
1 голос
/ 26 октября 2011

Я уже некоторое время бьюсь головой о стены, и все же мне не удалось решить эту проблему.

У меня есть 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 и добавить в нее свой метод, чтобы он поддерживал автоматическое отключение клавиатуры.

Ответы [ 2 ]

4 голосов
/ 26 октября 2011

Вы, вероятно, представляете, используя UIModalPresentationFormSheet.Если да, то это функция на iPad, с которой клавиатура не будет сброшена.

В iOS4 есть новый метод disablesAutomaticKeyboardDismissal:, который может помочь вам, если вы переопределите его, чтобы избавиться от поведения по умолчанию.

http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/disablesAutomaticKeyboardDismissal

0 голосов
/ 26 октября 2011

Один из вариантов - реализовать пользовательскую кнопку UIB и отправить ее в конец вашего корневого представления.по нажатию кнопки, оставьте своих первых респондентов.

Есть и другие решения, как и другой ответ здесь.

...