2010-12-03 3 views
1

у меня есть 3 текстовых поля и всякий раз, когда я нажимаю textField1 или textField2 Picker меняет значения, и нет клавиатуры. Когда я прикасаюсь к клавиатуре TextField3, и сборщик скрывается. Теперь, если я увольняю клавиатуру, нажимая кнопку «Возврат», а затем снова нажимаю кнопку «TextField1», но если я не отключаю клавиатуру КНОПКУ КЛИКСТИКИ, она остается над сборщиком. Что мне нужно, когда клавиатура firstResponder (и я вижу его на экране), чтобы скрыть его, если я нажимаю на textField1 и только увидеть початкоотделяющийКонфликт UIPicker и клавиатуры

int variabla; 

    -(void)textFieldDidBeginEditing:(UITextField *)textField{ 
     [pickerView setHidden:YES]; 
     if (textField1.editing == YES) { 
      [textField1 resignFirstResponder]; 
      [pickerView setHidden:NO]; 
      variabla = 1; 
     }else if (textField2.editing == YES) { 
      [textField2 resignFirstResponder]; 
      [pickerView setHidden:NO]; 
      variabla = 2; 
     } 
     NSLog(@"variabla %d",variabla); 
     [pickerView reloadAllComponents]; 
    } 

    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; 
    { 
     return 1; 
    } 
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; 
    { 
     if (variabla == 1) { 
      return [pickerArray1 count]; 
     }else if (variabla == 2) { 
      return [pickerArray2 count]; 
     }else { 
      return 0; 
     } 
    } 
    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
    { 
     if (variabla == 1) { 
      return [pickerArray1 objectAtIndex:row];   
     }else if (variabla == 2) { 
      return [pickerArray2 objectAtIndex:row]; 
     }else { 
      return 0; 
     } 
    } 
    - (void)textFieldShouldReturn:(UITextField *)textField{ 
     [textField resignFirstResponder]; 
    } 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [pickerView setHidden:YES]; 
    pickerArray1 = [[NSMutableArray alloc] initWithObjects:@"0", @"1", @"2", nil]; 
    pickerArray2 = [[NSMutableArray alloc] initWithObjects:@"3", @"4", @"5", nil]; 
} 

ответ

2

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

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

    if([textField isEqual:yourTextField3]) 
    { 
    yourPicker.hidden=YES; 
    } 
    else 
    { 

    [yourTextField3 resignFirstResponder]; 
    [self performSelector:@selector(textFieldFirstResponderOnDelay) withObject:nil afterDelay:0.3]; 
    } 
} 


- (void)textFieldFirstResponderOnDelay { 
    yourPicker.hidden=NO; 
} 

И все, что вы хотите, можете внести в эти условия.

или вы можете добавить тэг в свое текстовое поле и проверить соответственно. Скрыть сборщик, когда захотите, или отобразить сборщик и скрыть клавиатуру, когда захотите.

+0

Роберт это не работает, либо Вы 're wrong.Sorry – Spire 2010-12-03 11:22:45

+0

@spire это определенно работает, но его на вас, как вы используете это в соответствии с you.and это ответ ed by Ishu – Ishu 2010-12-03 11:43:13

0
@implementation UIPickerViewController 
    int variabla; 
    -(void)textFieldDidBeginEditing:(UITextField *)textField { 

     if([textField isEqual:textField3]) 
     { 
      pickerView.hidden=YES; 
     } 
     else 
     { 
      pickerView.hidden=NO; 
      [textField3 resignFirstResponder]; 
      if (textField1.editing == YES) {    
       variabla = 1; 
      }else if (textField2.editing == YES) {   
       variabla = 2; 
      } 
      NSLog(@"variabla %d",variabla); 
      [pickerView reloadAllComponents]; 
     } 
    } 

    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; 
    { 
     return 1; 
    } 
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; 
    { 
     if (variabla == 1) { 
      return [pickerArray1 count]; 
     }else if (variabla == 2) { 
      return [pickerArray2 count]; 
     }else { 
      return 0; 
     } 
    } 
    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
    { 
     if (variabla == 1) { 
      return [pickerArray1 objectAtIndex:row];   
     }else if (variabla == 2) { 
      return [pickerArray2 objectAtIndex:row]; 
     }else { 
      return 0; 
     } 
    } 
    - (BOOL)textFieldShouldReturn:(UITextField 
*)textField{  
     [textField resignFirstResponder]; 
     return YES; 
    } 
    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     [pickerView setHidden:YES]; 
     pickerArray1 = [[NSMutableArray alloc] initWithObjects:@"0", @"1", @"2", nil]; 
     pickerArray2 = [[NSMutableArray alloc] initWithObjects:@"3", @"4", @"5", nil]; 
    } 

и .h файл

@interface UIPickerViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> { 

    IBOutlet UIPickerView *pickerView; 
    IBOutlet UITextField *textField1; 
    IBOutlet UITextField *textField2; 
    IBOutlet UITextField *textField3; 
    NSArray *pickerArray1; 
    NSArray *pickerArray2; 
    UIButton *hideKeyboardButton; 

} 
-(void)textFieldDidBeginEditing:(UITextField *)textField; 
@end 
0

получил его THX за вашу помощь

-(void)textFieldShouldBeginEditing:(UITextField *)textField { 
    pickerView.hidden=YES; 
    if ([textField isEqual:textField3]) { 

    } 
    else if([textField isEqual:textField1]) 
    { 
     [textField3 resignFirstResponder]; 
     [self performSelector:@selector(textFieldFirstResponderOnDelay1) withObject:nil afterDelay:0.1]; 
    }else { 
     [textField3 resignFirstResponder]; 
     [self performSelector:@selector(textFieldFirstResponderOnDelay2) withObject:nil afterDelay:0.1]; 
    } 
} 

-(void)textFieldFirstResponderOnDelay1{ 
    pickerView.hidden=NO; 
    variabla = 1; 

    NSLog(@"variabla %d",variabla); 
    [pickerView reloadAllComponents]; 
} 
-(void)textFieldFirstResponderOnDelay2{ 

    pickerView.hidden=NO; 
    variabla = 2; 

    NSLog(@"variabla %d",variabla); 
    [pickerView reloadAllComponents]; 
} 

подборщика должна быть инициализирована до касания

поля 3
Смежные вопросы