2012-06-26 3 views
0

Итак, у меня есть около 7 текстовых полей, а 6 из них используют клавиатуру, а другая использует сборщик. Проблема, с которой я сталкиваюсь, заключается в том, что если клавиатура открыта, когда текстовое поле, связанное с сборщиком, тронута, клавиатура не будет отклонена, и под ней появится сборщик. Вот мой кодНесколько UITextFields с UIPicker и UIKeyboard

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

    [state resignFirstResponder]; 
    [self textFieldFirstResponderOnDelay1]; 




} 

else 
{ 
    pickerView.hidden = YES; 

    // This movie the view up so textfield isn't hidden by keyboard 
    CGRect textFieldRect = 
    [self.view.window convertRect:textField.bounds fromView:textField]; 
    CGRect viewRect = 
    [self.view.window convertRect:self.view.bounds fromView:self.view]; 

    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
    CGFloat numerator = 
    midline - viewRect.origin.y 
    - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
    CGFloat denominator = 
    (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) 
    * viewRect.size.height; 
    CGFloat heightFraction = numerator/denominator; 

    if (heightFraction < 0.0) 
    { 
     heightFraction = 0.0; 
    } 
    else if (heightFraction > 1.0) 
    { 
     heightFraction = 1.0; 
    } 

    UIInterfaceOrientation orientation = 
    [[UIApplication sharedApplication] statusBarOrientation]; 
    if (orientation == UIInterfaceOrientationPortrait || 
     orientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 
    } 
    else 
    { 
     animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction); 
    } 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y -= animatedDistance; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [self.view setFrame:viewFrame]; 

    [UIView commitAnimations]; 

} 





} 


-(void) viewDidLoad 
{ 
pickerView = [[UIPickerView alloc] init]; 
pickerView.frame = CGRectMake(0, 245, 320, 216); 
pickerView.delegate = self; 
pickerView.hidden = YES; 
pickerView.showsSelectionIndicator = YES; 
state.inputView = pickerView; 

[self.view addSubview:pickerView]; 
} 


-(void)textFieldFirstResponderOnDelay1 
{ 
pickerView.hidden=NO; 
[pickerView reloadAllComponents]; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
if([textField isEqual:state]) 
{ 

} 
else 
{ 
    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y += animatedDistance; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [self.view setFrame:viewFrame]; 

    [UIView commitAnimations]; 

} 




} 
+1

Как вы показываете представление выбора? –

+0

обновил вопрос выше – Sean

ответ

2

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

textField.inputView = pickerView; 
+0

Если я не добавлю его в качестве подзаголовка, он не появится, если я просто установил inputView текстового поля. – Sean

+0

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

+0

Итак, где я инициализирую сборщик? Вы говорите, что мне не нужно? – Sean

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