2015-10-21 2 views
0

Я пытаюсь добавить UIPickerView программно, но я не получаю желаемого результата.Добавление UIPickerView Programatically

У меня есть вид прокрутки, на который я добавил несколько UITextFields, как видно на изображении ниже.

Идея состоит в том, что когда пользователь выбирает DATE, отображается UIDatePicker, и пользователь выбирает DATE. Нажав кнопку NEXT на сборщиках DATEUIBarButtonItem (который я также добавил программно), текстовое поле TIME получает фокус и отображается UIDatePicker (по умолчанию по времени). Для полей DATE и TIME я использовал UIDatePicker, и это работает на 100%.

enter image description here

Для остальных 3-х текстовых полей я пытаюсь сделать то же самое, но с использованием UIPickerView вместо этого, так как они не имеют типа DATE или TIME.

Однако, когда я запускаю свой код, я получаю следующий результат, как показано ниже. Возможно, трудно сделать из-изображений, но позади/над нижней желтой SEARCH кнопкой является то, что должно быть UIPickerView (можно рассматривать как к серому линии чуть выше стержневых элементов PROFILE и SEARCH)

enter image description here

Мои UIPickerViewDelegate методы (numberOfComponentsInPickerView, numberOfRowsInComponent, titleForRow и didSelectRow) запускаются, когда сначала появляется представление, но не снова, из того, что я вижу при выполнении программы. Здесь я определяю, какой массив данных должен отображаться в текстовых полях страны или округа.

Ниже приведен код, который я должен отображать UIPickerViews программно.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self initPickers]; 
} 

- (void) initPickers 
{ 
    // Used for all other reusable UIPickerViews 
    pickerView = [[UIPickerView alloc] init]; 
} 

Затем, когда, например, СТРАНА текстовое поле получает фокус (это проверено и работает), я анимировать UIPickerView в следующим образом:

- (BOOL) textFieldShouldBeginEditing:(UITextField*) textField 
{ 
    activeTextField = textField; 

    if (activeTextField.tag == 2) 
    { 
     self.countryTextField.inputView = pickerView; 

     // We are on the Country Text Field 
     currentArray = countryDataArray; 
     NSLog(@"Array Count %ld", [currentArray count]); // Is populated with data 

     [self animatePickerViewIn]; 
     return NO; 
    } 

    return YES; 
} 

-(void) animatePickerViewIn 
{ 
    // Get the screen width and size 
    float screenWidth = [[UIScreen mainScreen] bounds].size.width; 
    float screenHeight = [[UIScreen mainScreen] bounds].size.height; 

    // Calculate the starting X Coordinate 
    float pickerWidth = screenWidth; 
    float pickerHeight = pickerView.frame.size.height; 
    float pickerViewStartinYCoordinate = screenHeight - pickerView.frame.size.height; 

    // Animate in and set PickerView to dimensions and coordinates 
    [UIView animateWithDuration:0.25 animations:^{ 
     [pickerView setFrame:CGRectMake(0, pickerViewStartinYCoordinate, pickerWidth, pickerHeight)]; 

     [self.view addSubview:pickerView]; 
    }]; 
} 

Может кто-нибудь, пожалуйста, объясните, почему я не вижу полный UIPickerView?

+1

Предполагается ли, что анимация оживляет его, как в анимированной клавиатуре? Я думаю, что это автоматически сделает это для вас, просто установив его как inputView, как вы.Попробуйте удалить анимацию и посмотреть, работает ли она –

+1

Зачем вам вообще нужно попробовать анимировать представление выбора? –

+0

Я попытался удалить анимацию и просто показать сборщик, когда вид загружается, но все же я получаю тот же результат, что и в вопросе. Вот как я тестировал его без анимации: - (void) initPickers { pickerView = [[UIPickerView alloc] init]; float screenWidth = [[UIScreen mainScreen])] .size.width; float screenHeight = границы [UIScreen mainScreen]] .size.height; поплавковый подборщик Ширина = ширина экрана; float pickerHeight = pickerView.frame.size.height; float pickerViewStartinYCoordinate = screenHeight - pickerView.frame.size.height; [self.view addSubview: pickerView]; } – heyred

ответ

2

Правильный способ сделать это - выбрать дату в качестве текстового поля inputView. Таким образом, когда текстовое поле становится первым ответчиком, UIKit позаботится о анимации выбора даты на экране (при необходимости). Вы также можете установить панель инструментов с помощью кнопки «Далее», как inputAccessoryView, и UIKit также позаботится о ее отображении.

Вот что это выглядит, как если бы вы просто установить дату сборщик и мнение Picker также мнение ввода ваших текстовых полей:

demo

Вот исходный код для моих демо-приложений: https://github.com/mayoff/ios-picker-input-views

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