2011-06-23 8 views
0

私はiPhone/iOSプログラミングを学ぼうとしています。表示されるとすぐに、選択した行をディスパッチする必要があるUIPickerViewがあります(flippSideViewに含まれています)。ちょうどロードされたUIPickerViewでselectRow:を呼び出すタイミングは?

残念ながら、flipSideViewControllerのawakeFromNibは呼び出されません。 viewDidLoadでやるのはやや遅すぎます。 これで、選択した行が表示されるとすぐにpickerViewに表示させることができますか?

アップデート:ここで

は、メソッドMySelectとがあり、私はフリップサイドコントローラではフリップサイドビュー

- (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 

を表示する方法です(私は呼び出しをトレーストレースを助けるために)

-(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) 
+1

は、あなたがのviewDidLoadを試してみましたか? –

+2

'viewWillAppear:'に存在しないピッカービューをいつ、どこに追加しますか? –

+0

はい、私はそれを試みました。間違った選択が短時間表示されるのがわかります。 – ragnarius

答えて

-1

iOSのバージョンによっては、[super viewWillAppear:animated]に電話するか、[self view]を呼び出すまで強制的にビューが読み込まれないというバグがあるようです。

+0

これを確認できますか? Appleのフレームワークを参照するのは簡単ですが、多くの場合、Appleのベストプラクティスを無視しているだけです。あなたはいつもあなたの実装でビューライフサイクルメソッドのスーパーの実装を呼び出すことになっています。 – Moshe

+0

私は同僚からこれを聞いたことがあります。多分バグかもしれませんが、バグではないかもしれませんが、-viewWillAppear:を呼び出す前にフレームワークがビューをロードしてはならない理由はわかりません。さらに、私はかなりよく分かっています。-viewDidLoadは、スーパーコールを必要としません(リファクタリングを行う理由から私たちの奇妙なクラス階層の1つではありません...)。 –

+0

私の質問では間違いでした。私はviewWillAppearのpickViewを持っています。私は(viewWillAppearの前に起こる)viewDidLoadからselectRowを呼び出しますが、やや遅すぎます。 – ragnarius

0

私は2,3日前に問題が発生しているようですが、実際にはバグだとは思っていません。問題はすべてが間違っていると思います。私が間違っている場合は私を修正しますが、最初に画面に表示されたときにPickerViewに特定の値を表示させたいですか? PickerViewをコードまたはペンで作成していますか?私のアプリで

、以下のコードスニペットは、意図したとおり、この作品右の私のviewDidLoadメソッド

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

の一番下にあります。あなたの問題をよりよく理解できるように、コードのスニペットを投稿してください。

PS:iOS向け開発するとき、私はawakeFromNibから離れて滞在し、ただのviewDidLoadを使用します。

+0

はい、最初に表示されたときに特定の値を表示するのが好きですが、アニメーションは表示されません。 「アニメーション」を「いいえ」に変更するとどうなりますか? – ragnarius

+0

正直言って、それはあなたがアニメーションに気づいていないほど素早く読み込まれていますが、Core Animationを使って画面の下から上に上げています。しかし、それをただのものにすることは、即座にあなたの価値に跳ね返ります。まだそれがあなたのために働いていない場合私に知らせてください – pob21

関連する問題