2011-01-29 1 views
0

У меня есть четыре текстовых поля в представлении. Первые три редактируются со стандартной клавиатурой. Последнее редактируется с помощью сборщика, который как свойство inputView текстового поля. Это классно, потому что он обрабатывает слайд вверх и вниз.Как сместить одну клавиатуру Сдвиньте пользовательский файл

Представьте, что я набираю что-то в одном из первых трех текстовых полей со стандартной клавиатурой. Теперь я коснусь четвертого ряда. Я хочу, чтобы стандартная клавиатура втягивалась, а сборщик поднимался вверх. Прямо сейчас он просто меняет местами.

Я пробовал использовать методы делегата textField для написания логики для resignFirstResponder на стандартной клавиатуре и стал первым ответчиком с помощью сборщика, но он все равно мгновенно меняется. Вот код.

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
//If we go from a keyboard field to a picker field 
if ((self.textFieldBeingEdited == self.nameField || self.locationField || self.controllerSNField)){ 
    if (textField == equipTypeField) { 

     //Put away the keyboard 
     [self.textFieldBeingEdited resignFirstResponder]; 

     //Show the Picker 
     [textField becomeFirstResponder]; 
    } 
} 
} 

мне нужно написать логику, чтобы скользить сборщик вниз и сдвиньте клавиатуру, если я иду с четвертым зрения на какой-либо из других. Но если я получу первую половину второго, это должно быть очевидно.

Любая идея, как это сделать без попадания в блоки анимации? Может быть, с уведомлениями?

Спасибо.

ответ

1

Проблема может заключаться в том, что вы уже начали редактирование к моменту вызова метода, поэтому вызов resignFirstResponder ничего не делает, потому что он уже не первый ответчик. Возможно, если вы снова станете первым ответчиком, это может сработать. Но затем вызов becomeFirstResponder на equipTypeField может вызвать textFieldDidBeginEditing, чтобы получить вызов снова, заставив вас застрять в бесконечном цикле. Без сомнения, quandry. Но по крайней мере, я хотел бы попробовать это:

//So that the keyboard that animates out is the one that was previously showing 
[self.textFieldBeingEdited becomeFirstResponder]; 
//Animate the keyboard out 
[self.textFieldBeingEdited resignFirstResponder]; 
//Don't let the user screw anything up 
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
//Animate the new keyboard in a little while later 
[textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.25]; 
//Let the user interact with the application again after the animation completes 
[[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:0.25]; 

Это все еще остается открытым вопрос о том, куда поместить этот код, так как если вы поместите его в textFieldDidBeginEditing, вы можете получить бесконечный цикл. Мое предложение было бы попробовать и посмотреть, что произойдет. Если он работает, отличный, иначе, введите какой-то логический флаг или что-то, чтобы удостовериться, что вы вызываете его только один раз до того, как вызывается метод didFinishEditing.

+0

Это не сработало, но я узнал кое-что из вашего решения. Я понимаю, что вы имеете в виду о бесконечном цикле. Благодарю. – Aaronium112

Смежные вопросы