Я использую UIPickerView в контроллере просмотра, который находится в модальном представлении (если так он называется). Я везде читал, что [picker reloadAllComponents];
в viewDidLoad должен помочь, но это не так. Я переопределил -(UIView*)viewForRow
-метод, но не думаю, что это должно быть проблемой ..
Дело в том, что когда viewController появляется вертикально, средство выбора пусто. И он остается пустым, пока я не прокручу вниз, чтобы появилась новая строка. Однако, если я добавлю [picker reloadAllComponents];
к viewDidAppear
, данные появятся сразу после того, как viewController завершит свою вводную анимацию (по вертикали). Хотя это раздражает. Я хочу, чтобы у сборщика уже были данные, когда он сдвигается вверх.
Я попытался вставить reloadAllComponents
как в viewDidLoad
, так и в viewWillAppear
, но это не сработало.
Я помещаю NSLog
в метод делегата, и он распечатывает правильные данные, и делает это до появления представления, но почему он его не показывает?
У меня была такая же проблема с tableViewController раньше, и я думаю, что reloadData
помогло тогда, но почему он не отображает мои представления в viewDidLoad? Он делает это только в том случае, если он вызывается в viewDIDappear ..
Код:
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if(component == TYPE1)
return [[con getTypes] count];
else return 1;
}
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
UIView* newView = [[UIView alloc] init];
//Create a label, put it on the left side of the view
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(view.frame.origin.x + 5, view.frame.origin.y, view.frame.size.width-45, view.frame.size.height)];
[label setText:[[[con getTypes] objectAtIndex:row] getName]];
[newView addSubview:label];//add
//Create an imageview, put it on the right side of the view
UIImageView*imageViewType = [[UIImageView alloc] initWithFrame:CGRectMake(view.frame.origin.x+(view.frame.size.width-40), view.frame.origin.y, 40, 40)];
[imageViewType setImage:[[[con getTypes] objectAtIndex:row] getImage]];
[newView addSubview:imageViewType];//add
[label setBackgroundColor:[UIColor clearColor]];
NSLog(@"%@", [[[con getTypes]objectAtIndex:row] getName]);
//This NSLog prints out the correct name for the top three items of the list
//-even when called from viewDidLoad, and even before the view appears, but
//the content never shows up in the picker unless I scroll or call it again in
//viewDidAppear..
return newView;
}
initWithController:(Controller*)c
(самодельный), а контроллер уже содержит изменяемый массив. В моем методе инициализации я используюself = [storyboard instantiateViewControllerWithIdentifier:@"identifier"];
, а затем устанавливаю данные, это проблема? .. Я так не думаю .. Когда я вызываюreloadAllComponents
изviewDidLoad
, он распечатывает правильный текст (текст, который должен отображаться в сборщике ), но он не будет отображать его, пока я не прокручу вниз, чтобы делегат вмешался или что-то в этом роде ... - person Sti   schedule 26.04.2013UIView *view
в viewForRow? Я думал, что это похоже на повторное использование, я могу ошибаться .. - person Sti   schedule 26.04.2013