2012-06-18 3 views
1

Я пытаюсь найти способ предотвратить появление клавиатуры, когда пользователь нажимает на TextField, но не может найти способ сделать это.Как получить UITextField для принятия фокуса без отображения клавиатуры?

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

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    NSLog(@"BeginEditing"); 
    return YES; 
    [textField resignFirstResponder]; 
} 

Когда я вернусь с NO я теряю фокус с TextField, что мне нужно.

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

+0

[textField resignFirstResponder]; не будет называться там ... –

+0

Что вы хотите делать, если сосредоточиться на текстовом поле и когда клавиатура не в порядке? – samfisher

+0

У меня есть кнопки, которые будут заполнять значения textField, кнопки находятся на одном и том же представлении. Представьте это как калькулятор с 4 текстовыми полями. @samfisher – aLFaRSi

ответ

1

если вы просто хотите пользователя выбрать текстовое поле для заполнения и не хотим клавиатуры, чтобы показать, то вы можете сделать следующее:

  • добавить тег к вашему TextFields
  • изменить код следующим образом:
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    selectedTextFieldTag = textField.tag; 
    return NO; 
} 

использование selectedTextField значение для определения того, какие текстовое поле для заполнения кода. return NO не позволит отображать клавиатуру.

+0

добавить 'selectedTextFieldTag' как NSUInteger в ur-класс. – samfisher

+0

это замечательно, но одна проблема, мигающая строка не появится в текстовом поле – aLFaRSi

+0

@ H.aLFaRSi, мигающая строка может быть только там, если клавиатура появляется. – samfisher

1

[textField resignFirstResponder]; не будет вызван, потому что вы возвращаетесь из метода до его вызова. Не предупреждает ли это предупреждение?

Пробуйте возвращение NO здесь или, если это не сработает, попробуйте отключить пользовательское взаимодействие на текстовом поле:

[myTextField setUserInteractionEnabled:NO]; 
+0

это не поможет, потому что я хочу, чтобы пользователь выбирал с помощью textField для заполнения. – aLFaRSi

+0

Не нужно ниспровергать мой ответ ... Чтобы быть честным, вернитесь, верните ДА, чтобы ниже resignFirstResponder должен работать. Если вы оставите элемент управления открытым, но не позволяете пользователю вводить что-либо, что я думаю, что идет против Руководства разработчика ... –

+0

Я не проголосовал за ваш ответ, и я просто попробовал, он не работал – aLFaRSi

0
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
NSLog(@"BeginEditing"); 
[textField resignFirstResponder]; 
return YES; 

} 
+0

Не работает тоже. – aLFaRSi

+0

@iArezki Если вы сделаете это в iOS 7, вы получите белую линию, как этот вопрос http://stackoverflow.com/questions/20946524/white-line-on-the-bottom-on-ios-7-with-uitextfield Знаете ли вы решение для этого? – deltaaruna

0

так что здесь вы просто использовать флаг переменную INT присвоить значение ориентированной TextField

определяет int i; флаг глобально в .h или .m файл

после этого в TextField делегат использование метода сильфон код ...

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 

    if (textField == yourtextField1) { 
     i=1; 
    } 
    else if (textField == yourtextField2) { 
     i=2; 
    } 
    else if (textField == yourtextField3) { 
     i=3; 
    } 
    else if (textField == yourtextField4) { 
     i=4; 
    } 
    return NO; 
} 
-(IBAction)yourbutton1_Clicked:(id)sender{ 
      if(i == 1){ 
       yourtextField1.text=yourbutton1.titleLabel.text; 
      } 
      else if (i == 2){ 
      yourtextField2.text=yourbutton1.titleLabel.text; 
      } 
      else if (i == 3){ 
      yourtextField3.text=yourbutton1.titleLabel.text; 
      } 
      else if (i == 4){ 
      yourtextField4.text=yourbutton1.titleLabel.text; 
      } 
      else{ 
       NSLog(@"Please Click On TextField");//here you can put AlertView Message 
      } 
} 

и так далее .......

также вы можете использовать общий метод с отправителем идентификатором кнопки, а также помечать ..... .

+0

У меня есть 4 TEXFIELDS :) – aLFaRSi

+0

, тогда просто введите код с событием действия кнопки, см. Мой отредактированный ответ выше ... –

+0

извините, но вы меня не поняли, у меня есть 4 текстовых поля, а не 4 кнопки, у меня есть 10 кнопок, каждый кнопка имеет значение, мне нужно, например, сказать, что пользователь нажимает на TextField2, затем нажимает вторую кнопку, чтобы заполнить поле номером 2, затем он выбирает TextField4, он нажимает 9-ю кнопку, чтобы заполнить textField номером 105. – aLFaRSi

2

Это поможет вам точно.

-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField { 
UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)]; 
activeField.inputView = dummyView; // Hide keyboard, but show blinking cursor 
return YES; 
} 

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

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