35

作業中のビューコントローラー クラスを別のプロジェクトから新しいプロジェクトにコピーしました。ビューを新しいプロジェクトにロードできません。古いプロジェクトでは、presentModalViewController を使用しました。新しいものでは、presentModalViewController または presentViewController のいずれかを使用してビューをロードできません

メインのView Controllerから現在のビューを読み込もうとしています。

これが私のメインView Controllerインターフェースの外観です...

//  ViewController.h
#import <UIKit/UIKit.h>
#import "RequestDialogViewController.h"

@interface ViewController : UIViewController <RequestDialogViewControllerDelegate> {

}

- (void)requestDialogViewDidDismiss:(RequestDialogViewController *)controller withResponse:(NSString*)response;

私はこのようにpresentModalViewControllerを使用しています...

RequestDialogViewController *requestIPViewController = [[RequestDialogViewController alloc] initWithNibName:@"RequestDialogViewController"  bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:requestIPViewController];
[self presentModalViewController:navigationController animated:YES];

そして、このようにpresentViewController ...

RequestDialogViewController *requestIPViewController = [[RequestDialogViewController alloc] initWithNibName:@"RequestDialogViewController"  bundle:nil];    
[self presentViewController:requestIPViewController animated:YES completion:nil];

新しいプロジェクトに欠けているものは何ですか? init メソッドは起動しますが、viewDidLoad は起動せず、何も表示されません。

ありがとう

4

5 に答える 5

88

がルート ビュー コントローラである場合、その時点では画面サイズなどの情報がないためViewController、独自の 内からモーダル ビュー コントローラを提示することはできません。viewDidLoad

他のView Controllerがすでに表示されている場合、これは機能します。ルート ビュー コントローラーが の場合UINavigationController、モーダル ビューが下から上にスライドする間、ビューが右からスライドします。

とにかく、あなたのViewControllerのために、それを提示できるのはそれが見えるようになった後です. これにタイマーを使用するのは信頼できません。古くて遅いデバイスでは、ロード時間が劇的に長くなります。

信頼性を高めるには、 for を実装viewDidAppear:ViewControllerます。引き続きタイマー システムを使用して遅延を追加してください。ほんの一瞬で十分です。内部からモーダル ビュー コントローラーを提示することviewDidAppearは iOS 5.1 シミュレーターでうまくいきましたが、別の ViewController をロードするときにモーダル ビュー コントローラーを提示することは時々起こらないと言います。

于 2012-04-14T05:55:11.537 に答える
4

@Dondragmer が言ったように、ルート ビューの viewDidLoad で viewController を提示する場合、それは失敗します。viewController の準備ができたら、新しい viewController を提示できます。だから、あなたはそれを行うことができます

- (void)viewDidLayoutSubviews {
    //present here
}
于 2015-09-05T05:03:46.533 に答える
4

解決しました。ビューからビューを表示しようとしていたところ、メイン ビュー コントローラーが読み込まれました。そこで動作しない理由はわかりませんが、代わりに、メイン ビューの読み込み後にビュー コントローラーを表示するメソッドを呼び出すタイマーを設定しており、現在は正常に動作しています...

[self presentViewController:requestIPViewController animated:YES completion:nil]; 

回答者に感謝します。

于 2012-04-14T04:52:38.523 に答える
0

同じ問題が発生しました。しかし、私の状況は、別のViewControllerpresentViewControllerの後に呼び出されます。dismissViewControllerAnimated私の解決策は、のpresentViewController完了ブロックに移動することですdismissViewControllerAnimated

于 2014-07-18T01:13:40.383 に答える
-1

modalViewControllerを提示します。

すべての初心者プログラマーの利益のために、コピー&ペーストの代わりにそれを入力してください。

myVC *viewController = [[myVC alloc]initWithNibName:@"myVC" bundle:nil];
viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:viewController animated:YES];
[viewController release];

最初のサンプルでnavコントローラーをビューコントローラーとして提示しようとしていたようですが、2番目のサンプルでは間違った方法を使用していました。

于 2012-04-13T21:18:29.760 に答える