Когда вызывать selectRow: в только что загруженном UIPickerView? - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь научиться программировать на iPhone / iOS.У меня есть UIPickerView, который должен отображать выбранную строку, как только она станет видимой (она содержится в flippSideView).

К сожалению, awakeFromNib flipSideViewController не вызывается.Несколько поздно сделать это в viewDidLoad.Итак, как я могу заставить pickerView отображать выбранную строку, как только она станет видимой?

Обновление:

Вот как я показываю оборотную сторону

- (IBAction)showInfo:(id)sender {    

    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    controller.delegate = self;
    controller.uData = userData;

    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
    controller.pickerView.delegate   = userData;
    controller.pickerView.dataSource = userData;

    [controller release];
}// showInfo

В контроллере с обратной стороны есть метод mySelect (чтобы помочь мне отследить вызовы)

-(void) mySelect:(NSString*) strMethod{
    int row = [uData getCurrentUserRow];
    [pickerView selectRow:row inComponent:0 animated:NO];        
    NSLog(@"selectRow %d called from %@  (pickerView=%d uData=%d)", row, strMethod, (int)pickerView, (int)uData); }

, и когда программа запускается, она генерирует журнал

selectRow 3 called from viewDidLoad  (pickerView=87412720 uData=89267696) 
selectRow 3 called from viewWillAppear (pickerView=87412720 uData=89267696) 
selectRow 3 called from viewDidAppear (pickerView=87412720 uData=89267696)

Ответы [ 2 ]

0 голосов
/ 24 июня 2011

Кажется, у вас есть проблема, с которой я столкнулся пару дней назад, я действительно не думаю, что это ошибка. Я думаю, проблема в том, что все вызывается (может быть неправильно).Поправьте меня, если я ошибаюсь, но вы хотите, чтобы ваш PickerView отображал определенное значение, когда оно впервые отображается на экране правильно?Вы создаете PickerView в коде или из пера?

В моем приложении приведенный ниже фрагмент кода находится прямо в нижней части моего метода viewDidLoad

[pickerView selectRow: 100 inComponent:0 animated:YES];

Это работает как задумано.Пожалуйста, опубликуйте фрагмент своего кода, чтобы мы могли лучше понять вашу проблему.

PS: При разработке для iOS я бы держался подальше от awakeFromNib и просто использовал ViewDidLoad:

0 голосов
/ 24 июня 2011

В некоторых версиях iOS, по-видимому, есть ошибка, из-за которой ваше представление не загружается, пока вы не вызовете [super viewWillAppear:animated] или не заставите его загрузить, вызвав [self view].

...