Добавление [myUITextFieldcomeFirstResponder];не воспитывает клавиатуру - PullRequest
2 голосов
/ 10 февраля 2012

Я создал экран, на котором есть UITextField. Когда я получаю событие EditingDidBegin, я resignFirstResponder, вызываю Popover с другим textField в нем, и для этого TextField вызывает BecomeFirstResponder для него.

Когда он запускается, я получаю мигающий указатель вставки и X очищает содержимое. Хотя нет клавиатуры. Master UIView имеет значение UserInteractionEnabled: ДА.

целевое действие для First UITextField, само по себе.

[textField addTarget:self action:@selector(wantsToEditValue:) forControlEvents:UIControlEventEditingDidBegin];

Селектор целевого действия:

- (IBAction)wantsToEditValue:(id)sender {
// set notification so we can update from popover
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(saWriteValue:)
                                             name:kRefreshFromPopover object:nil];

    //we dont want the TagValue textfield to really be the first responder.
[textField resignFirstResponder];


    [... setup popoverVC, and View. present popover...]

}

Вот код для создания второго UITextField. Этот код находится в ВК для Popover ..

- (void)viewDidLoad
{
if (IoUIDebug & IoUIDebugSelectorNames) {
    NSLog(@"%@ - %@", [self description], NSStringFromSelector(_cmd) );
}    [super viewDidLoad];

[self createElementInputControl];
[self createWriteButton];

    //We want the input Focus
     [textFieldInput becomeFirstResponder];


    //Resize our view to handle the new width
CGRect newViewSize = CGRectMake(self.view.frame.origin.x, 
                                self.view.frame.origin.y, 
                                writeButton.frame.origin.x + writeButton.frame.size.width + kWriteElementOffset , 
                                self.view.frame.size.height);

[self.view setFrame:newViewSize];
}

Создать код ввода:

-(void) createElementInputControl {


 textFieldInput = [[UITextField alloc] initWithFrame:CGRectMake( kWriteElementOffset   ,
                                                                            kWriteElementHeightOffset, 
                                                                            kTagValueInputInitialWidth,
                                                                            kWriteElementDefaultHeight)];

textFieldInput.borderStyle = UITextBorderStyleRoundedRect;
textFieldInput.clearButtonMode = UITextFieldViewModeWhileEditing;
textFieldInput.textAlignment = UITextAlignmentLeft;
[textFieldInput setDelegate:self];
[textFieldInput setKeyboardType:UIKeyboardTypeDefault];

    // Set the value of the text
[textFieldInput setText:self.myTag.value];

CGSize textFieldInputSize  = [textFieldInput.text sizeWithFont:textFieldInput.font];

    //Set the Button Width
[textFieldInput setFrame:CGRectMake(textFieldInput.frame.origin.x, textFieldInput.frame.origin.y, textFieldInputSize.width + kTagValueInputWidthBuffer, textFieldInput.frame.size.height)];

[self.view addSubview:textFieldInput];
}

Когда я удаляю код сталFirstResponder, Popover появляется как обычно, но без мигающего указателя вставки. Я нажимаю на поле, я получаю Insertion Pointer, X кнопку очистки содержимого и да, клавиатуру.

Я хочу, чтобы клавиатура отображалась без щелчка в новом текстовом поле.

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Чтобы стать первым респондентом, представление должно находиться в иерархии представлений. Вам нужно добавить свой textFieldInput как подпредставление к чему-либо.

Согласно документу Apple в UIResponder:

Вы можете вызвать этот метод, чтобы сделать объект респондента, такой как представление, первым респондентом. Однако вы должны вызывать его только в этом представлении, если оно является частью иерархии представлений. Если свойство окна представления содержит объект UIWindow, оно установлено в иерархии представления; если он возвращает nil, представление отсоединяется от любой иерархии.

0 голосов
/ 10 февраля 2012

Когда вы вызываете стать первым респондентом из didBeginEditing, вы попадете в бесконечный цикл. Причиной, когда вы вызываете становление становленияFirstResponder, это вызывает didBeginEditing.Итак, он объясняет, что курсор мигает, и ваше утверждение

Когда я удаляю код становленияFirstResponder, Popover появляется как обычно, но без мигающего указателя вставки.Я нажимаю на поле, получаю Insertion Pointer, X кнопку очистки содержимого и да Keyboard.

Чтобы решить вашу проблему,

В методе beginEditingMethod,

if(texfield.tag == firstTextFieldTag)
{
//Create second TextField and make it become first responder
}
else
{
// do want you want in the beginEditing of your second textfield.
}
...