2013-07-12 3 views
0

На мой взгляд, у контроллера есть 5 текстовых полей, 4 - первый ответчик с клавиатурой и один с UIPicker, все они помечены +1 (0,1,2 ...)Добавление кнопки «Пред.» И «Следующий» в представление Access моего UIPicker?

Как раз так бывает, что текстовое поле, которое становится первым ответчиком с Picker, - это номер 3, поэтому он застрял посередине. В моих других полях у меня есть мой код, так что кнопка возврата «Следующий» возвращает меня в следующее поле, но я не смог вытащить то же самое с помощью сборщика, код, который делает это:

-(BOOL) textFieldShouldReturn:(UITextField *) theTextField { 
    if (theTextField == self.textFieldE) {  
     [theTextField resignFirstResponder]; //This of course being the last text field 
    } else { 
     [(UITextField *)[theTextField.superview viewWithTag:theTextField.tag+1] 
     becomeFirstResponder]; 
    } 
    return YES; 
} 

UIPickerView имеет прикрепленный к нему дополнительный вид с завершенной кнопкой, что фактически делает resignFirstResponder, но мне нужно добавить предыдущую и следующую кнопку, чтобы сделать firstResponder либо -1.tag, либо + 1.tag, поскольку подборщика застрял в номер позиции 3.

Вот мой сборщика код:

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

    if (textField == self.textOutlet) { 

     self.textOutlet.inputView = _thePicker; 
     self.thePicker.hidden = NO; 

     UIToolbar* toolbar = [[UIToolbar alloc] init]; 
     toolbar.barStyle = UIBarStyleBlackTranslucent; 
     [toolbar sizeToFit]; 

     //to make the done button aligned to the right 
     UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 


     UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                     style:UIBarButtonItemStyleDone target:self 
                     action:@selector(doneClicked:)]; 


     [toolbar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft, doneButton, nil]]; 

     self.textOutlet.inputAccessoryView = toolbar; 
    } 

    } 

и, конечно, действие кнопки «Готово»:

-(void)doneClicked:(id) sender 
{ 
    [_textOutlet resignFirstResponder]; //hides the pickerView 
} 

Спасибо за помощь заранее!

ответ

1

Попробуйте этот код. Он должен работать так, как вы хотите.

#define SEGMENTED_CONTROL_TAG 1567 // random 

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

    if (textField == self.textOutlet) { 

     self.textOutlet.inputView = _thePicker; 
     self.thePicker.hidden = NO; 

     UIToolbar* toolbar = [[UIToolbar alloc] init]; 
     toolbar.barStyle = UIBarStyleBlackTranslucent; 
     [toolbar sizeToFit]; 

     UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Previous", @"Next", nil]]; 
     segmentedControl.tag = theTextField.tag + SEGMENTED_CONTROL_TAG; 
     [segmentedControl addTarget:self action:@selector(textFieldContinue:) forControlEvents:UIControlEventValueChanged]; 

     //to make the done button aligned to the right 
     UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 


     UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                     style:UIBarButtonItemStyleDone target:self 
                     action:@selector(doneClicked:)]; 


     [toolbar setItems:@[segmentedControl,flexibleSpaceLeft, doneButton]]; 

     self.textOutlet.inputAccessoryView = toolbar; 
    } 

} 


-(IBAction) textFieldContinue:(UISegmentedControl*)control{ 
    UITextField *textField; 
    if(control.selectedSegmentIndex == 0) { 
     textField = (UITextField*)[self.view viewWithTag:control.tag-1 - SEGMENTED_CONTROL_TAG]; 
    } else if (control.selectedSegmentIndex == 1) { 
     textField = (UITextField*)[self.view viewWithTag:control.tag+1 - SEGMENTED_CONTROL_TAG]; 
    } 
    if(textField) { 
     [textField becomeFirstResponder]; 
    } 
} 
+0

Ну, я дал коду попробовать, но сбои приложения при выборе текстового поля с подборщиком .. Я заменил 'theTextField' с именем текстового поля, которое имеет вход сборщика. Я получаю следующий журнал отладки: '2013-07-12 11: 34: 38.979 calcApp [1519: 907] - [UISegmentedControl view]: непризнанный селектор отправлен в экземпляр 0x1dd7bfa0 2013-07-12 11: 34: 38.981 calcApp [1519 : 907] *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [UISegmentedControl view]: непризнанный селектор отправлен в экземпляр 0x1dd7bfa0' '@Vojtech Vrbka – vzm

+0

У вас есть эта функция в UIViewController или в вашем пользовательском классе UITextField ? –

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