何时调用selectRow:刚刚加载的UIPickerView?

时间:2011-06-23 23:38:24

标签: iphone objective-c ios uipickerview

我正在尝试学习iPhone / iOS编程。我有一个UIPickerView,一旦它变得可见就会显示它所选择的行(它包含在flippSideView中)。

不幸的是,没有调用flipSideViewController的awakeFromNib。在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 :(得分:0)

好像你有几天前遇到的问题,我真的不认为这是一个错误,我认为问题是什么时候被调用(可能是错的)。如果我错了,请纠正我,但是当你的PickerView首次在屏幕上显示正确时,你希望它显示一个特定值?您是在代码中还是从笔尖创建PickerView?

在我的应用中,以下代码段位于viewDidLoad方法的底部

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

这是按预期工作的。请发布您的代码片段,以便我们更好地了解您的问题。

PS:在为iOS开发时,我会远离awakeFromNib,只使用ViewDidLoad:

答案 1 :(得分:-1)

在某些版本的iOS中显然存在一个错误,这意味着在您致电[super viewWillAppear:animated]或通过调用[self view]强制加载来加载视图之前,您的视图无法加载。