Я пытаюсь добавить UIPickerView
программно, но я не получаю желаемого результата.Добавление UIPickerView Programatically
У меня есть вид прокрутки, на который я добавил несколько UITextFields
, как видно на изображении ниже.
Идея состоит в том, что когда пользователь выбирает DATE
, отображается UIDatePicker
, и пользователь выбирает DATE
. Нажав кнопку NEXT
на сборщиках DATE
UIBarButtonItem
(который я также добавил программно), текстовое поле TIME
получает фокус и отображается UIDatePicker
(по умолчанию по времени). Для полей DATE
и TIME
я использовал UIDatePicker
, и это работает на 100%.
Для остальных 3-х текстовых полей я пытаюсь сделать то же самое, но с использованием UIPickerView
вместо этого, так как они не имеют типа DATE
или TIME
.
Однако, когда я запускаю свой код, я получаю следующий результат, как показано ниже. Возможно, трудно сделать из-изображений, но позади/над нижней желтой SEARCH
кнопкой является то, что должно быть UIPickerView
(можно рассматривать как к серому линии чуть выше стержневых элементов PROFILE
и SEARCH
)
Мои 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?
Предполагается ли, что анимация оживляет его, как в анимированной клавиатуре? Я думаю, что это автоматически сделает это для вас, просто установив его как inputView, как вы.Попробуйте удалить анимацию и посмотреть, работает ли она –
Зачем вам вообще нужно попробовать анимировать представление выбора? –
Я попытался удалить анимацию и просто показать сборщик, когда вид загружается, но все же я получаю тот же результат, что и в вопросе. Вот как я тестировал его без анимации: - (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