(最終的な解決策)一般的なUIViewControllerの後にカスタムUIViewControllerを設定するにはどうすればいいですか?
初期ログイン表示を持つiPadアプリを設定しようとしています。ユーザーがアクションをクリックすると、ホームビューにリダイレクトされます。 最初は、ログインビューを処理するUIViewControllerを設定していました。そこから、カスタムビューコントローラーを使用して、次のビューグループを表示したかったのです。次のように
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
loginViewController = [[LoginViewController alloc] init];
[self.window addSubview:loginViewController.loginView];
[self.window makeKeyAndVisible];
return YES;
}
そして、私のLoginViewControllerためのインタフェース:
@interface LoginViewController : UIViewController {
UIView *loginView;
UITextField *usernameTextField;
UITextField *passwordTextField;
UIButton *submitButton;
}
@property (nonatomic, retain) IBOutlet UIView *loginView;
@property (nonatomic, retain) IBOutlet UITextField *usernameTextField;
@property (nonatomic, retain) IBOutlet UITextField *passwordTextField;
-(IBAction)submit;
-(void)setupTextFields;
@end
私は何だったの
私はAppDelegateからウィンドウに、このビューを追加し、loginViewを扱うLoginViewControllerを作成しています私のLoginViewController内のUIViewControllerクラスを拡張するHomeViewControllerを追加して、loginView内のアクションボタンが押されたときに新しいカスタムView Controllerをロードするようにしました。
しかし、私はそのように行う際に、HomeViewControllerで扱う初期表示された画像が正しく表示されます。それは肖像画でなければならないときに風景を表示するように見えます。
私はログアウトアクションがクリックされたときに、このログインビューに戻ってくることができるようにするために、ビューのスタックで一番下に表示されるログインビューを持っていると思います。
私はこの問題に対する私のアプローチが間違っていると思います。誰も私を最良の解決策に導くことができますか?どうすればこれを達成できますか? @Jonahによって提案された解決策に従った後
、私はAppDelegateに作成したものであることをhomeViewControllerを切り替えて、次のようにdisplayLoginModalViewController
と呼ばれています:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
homeViewController = [[HomeViewController alloc] init];
[homeViewController displayLoginModalViewController];
[self.window addSubview:homeViewController.homeView];
[self.window makeKeyAndVisible];
return YES;
}
私displayLoginModalViewController
の実装を次のように:
-(void)displayLoginModalViewController{
LoginViewController *loginViewController = [[LoginViewController alloc] init];
loginViewController.modalPresentationStyle = UIModalPresentationFullScreen;
loginViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:loginViewController animated:YES];
}
の追加前後はウィンドウに表示され、モーダル表示はレンダリングされません。私はここに欠けているものがあるように感じる。このメソッドは、ログアウトアクションがhomeViewから押されたときにモーダルビューをレンダリングします。アプリケーションが起動していないときだけです。
また、didFinishLaunchingWithOptions:
とpresentModalViewController
:displayLoginModalViewController
の方法でサブビューを追加した後にNSLog
sを配置しました。両方ともNSLog
が私のコンソールに表示されますが、私はモーダルビューを表示していない理由はわかりません。
============================================== ==============================================
提供されたオプションをありがとう。私はモーダルルートに行くことに決めました。残念ながら私が最初にそれを設定していたとき、私は問題に間違った方法で近づいていました。それはモーダルビューに降りてきたとき
は、どうやら彼らは、ユーザーの操作を必要としています。これは、ユーザーが行った操作の後にのみ表示できることを意味します。私が最初にモーダルビューとしてログインを設定し、私のメインビューとして私のホームビューを維持したいとき、モーダルビューを起動時に表示することはできませんでした。それは行動を必要とした。
数時間画面を見た後、私は頑固になるのを止め、メイン画面としてログインを使用し、ホームビューをモーダルとして表示することに決めました。これは、起動時にログインを表示する問題を解決するだけでなく、セットアップを助けるだけでなく、アプリケーションを終了してその時点からすべてのメモリ使用量を解放することなく、ユーザーをアプリからログアウトできるようにしたかったのです。
[ログアウト]ボタンを押すとどうなりますか?モーダルビューを再度表示するだけですか? –
あなたの選択は私がしたいことに非常に適していると思います。インスタンス化されたときに、どのようにアプリがモーダルビューコントローラを読み込ませることができますか? initWithNibNameメソッドにコードをいくつか入れましたが、ロードしていないようです。 –
アプリケーションデリゲートの '-application:didFinishlaunchingWithOptions:'でHomeViewControllerを作成してウィンドウに追加します。次に、あなたが投稿した例のようにLoginViewControllerをインスタンス化し、それをあなたのHomeViewControllerインスタンスの '-presentModalViewController:animated:'メソッドに渡します。あなたのHomeViewControllerはそれ自体の上にLoginViewControllerを表示します。 LoginViewControllerはそれ自体を却下するか、ログインが完了したことをHomeViewControllerに通知し、HomeViewControllerは '-dismissModalViewControllerAnimated:'を使ってそれを却下することができます。 – Jonah