私はiosに少し慣れていませんが、混乱することはできました...今まで。ログインページのあるアプリケーションがあります。最初にしたことは、いくつかの空のビュー コントローラーを作成し、それらをストーリーボードに貼り付けることでした。userId と password のテキストフィールドとログインボタンを備えた LoginViewController があります。ログインに成功すると、TabViewController が表示されます。現在、これは箱から出しています。これで作成された 2 つの View Controller を削除し、それらを 2 つの NavigationController に置き換えました。
すべてをテストするために、ログイン ボタンから TabViewController へのセグエを作成しました。すべてがうまくいきました。意見が出ました。すぐに使用できるものはすべて機能しました。
次のステップでは、実際のログインをシミュレートしようとしました。Web サービス呼び出しを介してこれを行う必要があるため、非同期にする必要があると考えました。ログイン ボタンに追加した最初のセグエを削除し、ボタンから IBAction を LoginViewController に追加しました。また、LoginViewController から TabViewController に手動のセグエを追加し、「loginSegue」という名前を付けました。
これが私がこれまでに持っているコードです:
- (IBAction)login:(id)sender {
[Decorator showViewBusyIn:self.aView
scale:1.5
makeWhite:NO];
self.clientIdText.enabled = NO;
self.userIdText.enabled = NO;
self.passwordText.enabled = NO;
UIButton* loginBtn = sender;
loginBtn.enabled = NO;
[Decorator showViewBusyIn:self.aView
scale:2.0
makeWhite:NO];
self.operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(doLogin)
object:nil];
self.queue = [[NSOperationQueue alloc] init];
[self.queue addOperation:self.operation];
}
-(void)doLogin{
[NSThread sleepForTimeInterval:1];
[Decorator removeBusyIndicatorFrom:self.aView];
// this is where I will eventually put the login code...
[self performSegueWithIdentifier:@"loginSegue" sender:self];
}
Web サービスの呼び出しが完了するまでの待機をシミュレートするために、sleepForTimeInterval への呼び出しを行いました。後で削除します。デコレーターのものは、アクティビティインジケータービューを表示および削除するだけです。
これをすべて行うと、セグエは機能しますが、ログインビューコントローラーに関連付けられたビューは画面に残ります。別の言い方をすれば、TabViewController が表示されます。最初のアイテムが選択されます。NavigationController は表示されますが、それに関連付けられている VC とそれに含まれるビューは表示されません。LoginViewController からのビューはそこにとどまります。
ログインボタンにセグエを配置すると、すべてのナビゲーションが正常に機能したため、呼び出し操作と関係があると思います。それか、どういうわけか、ビューまたはビューコントローラーの階層がめちゃくちゃになっています。
私が間違っていることについてのアイデアはありますか?これはログインを行う良い方法ですか?
どんな助けでも大歓迎です、ナット