2010-12-03 75 views
1

我有什么是3 textFields和每当我触摸textField1或textField2选取器更改值,并没有键盘。当我触摸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

罗伯特这不工作,要么你被初始化'重新错了。亲爱的 – Spire 2010-12-03 11:22:45

+0

@spire这绝对的作品,但它对你如何使用这根据you.and这就是答案编辑由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]; 
} 

选择器必须触碰文字栏前