2010-12-03 11 views
1

私が持っているものは3つのtextFieldで、いつでも私はtextField1またはtextField2をタッチします。Pickerは値を変更し、キーボードはありません。私がtextField3キーボードをタッチすると、ピッカーがhiddenになります。次に、Returnをクリックしてキーボードを閉じると、textField1ピッカーが再び表示されます。しかし、キーボードを閉じるには、CLICKINGボタンを押してもピッカーに留まりません。キーボードはfirstResponderは(と私は、画面上でそれを参照してください)、それを隠すためにあるとき、私はあなたがの多くを使用することができます。この問題を解決するためのテキストフィールド1をクリックするだけピッカー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

[OK]を参照してください場合は何が必要なのですオプション私はそれらの1つを教えてください。

- (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

+0

@spireこれは間違いなく動作しますが、それはどのようにあなたに応じてこれを使用しています。これは答えですIshuによって編集されました – Ishu

+0

Bro、いくつかのコードが欠落していることを確認してください。 – Ishu

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

textFieldDidBeginEditingではなくtextFieldShouldBeginEditingを使用します。 – Ishu

+0

しかし、textField3を最初のレスポンダにすることはできず、クリックするとキーボードが表示されません。私はそれを2回クリックしてキーボードが現れるようにしなければならない – Spire

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