web-dev-qa-db-ja.com

ストーリーボードでUIViewControllersを手動で切り替えるにはどうすればよいですか?

必要なのは、同じストーリーボードファイルのUIViewコントローラーをコードで手動で表示することだけです。ストーリーボードを使用して、すべてのフォームと接続を作成します。アプリケーションはNavigation Controllerで起動し、UIViewLoginViewController)へのアクセスを提供してから、4つのUIViewsを提供するTab Bar Controllerに進みます。すべてのUIViewによると、私は.hおよび.mファイル。私はセグエ法について知っています、それは簡単ですが、手動の方法が必要です。たぶん私は何か間違ったことをしている。

IBActionでView Controllerをプッシュするためにこのメソッドを使用しようとしました:

[self.view pushViewController:LoginViewController animated:YES];

ただし、エラーが発生します。

予期しないインターフェイス名「LoginViewController」:予期される式

何が悪いのかを理解するのに多くの時間がかかりましたが、私は成功しませんでした。これが私のRollEnemyController.mファイル:

//  RollEnemyController.m
#import "RollEnemyController.h"
#import "LoginViewController.h"
@implementation RollEnemyController;
@synthesize AttackButtonPressed;

- (IBAction)AttackButtonPressed:(id)sender {
    LoginViewController* controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController"  bundle:nil];
    [self.view pushViewController:controller];
}

@end

そして、これはヘッダーファイルです:

//  RollEnemyController.h

#import <UIKit/UIKit.h>

@interface RollEnemyController : UIViewController

- (IBAction)RollButtonPressed:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *AttackButtonPressed;

@end
25
kokoko

私はあなたがUINavigationControllerを使用していると推測しています。次に、このようにすることができます:

LoginViewController *controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];

更新:

UIStoryboardを使用している場合、新しいViewControllerの識別子を設定し、それをnavigationControllerにプッシュできます。識別子を設定するには、ビューを選択し、属性インスペクターを開いて、識別子(この例では「LoginIdentifier」)を設定します。次に、これを行うことができます:

LoginViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginIdentifier"];
[self.navigationController pushViewController:controller animated:YES];

補足として、メソッドに大文字を使用していることがわかります。おそらくそれを避け、代わりにメソッド名の最初の文字を低くしてください。また、Objective-Cを学習していると言っているので、SOでこの素晴らしいスレッドをチェックしてください: link

更新2:

ここ は、これを行う方法を示すプロジェクトを含むZipファイルです。 :-)

108
matsr

こんにちは、このコードを使用してみてください

Storyboard put ID = "xxx * Name Desire"マークStoryboarIDを使用

UIStoryboard * storyboard = self.storyboard;

DetailViewController * detail = [storyboard instantiateViewControllerWithIdentifier: @ "xxx * Name Desire"];

[self.navigationController pushViewController: detail animated: YES];
4
Danieldms

この声明では:

[self.view pushViewController:LoginViewController animated:YES];

classをプッシュしようとしているようです。実際のコントローラーであるオブジェクトをプッシュする必要があります。

LoginViewController* controller = [[LoginViewController alloc] init...];
[self.view pushViewController:controller animated:YES];

これは少なくともコンパイルされ、残りがすべて問題なければ、2番目のコントローラーも提供します。

編集:

一点逃しました。ビューにView Controllerをプッシュしています。それは意味がありません。コントローラーをNavigation Controllerにプッシュする必要があります。

<AppDelegate> *del = (AppDelegate*)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:controller animated:YES];

これは、少なくとも、Navigationベースのテンプレートからプロジェクトを作成した場合に当てはまります(Navigation Controllerへの参照を使用してアプリケーションデリゲートを作成します)。それ以外の場合は、Navigation Controllerの作成方法に関する詳細を入力してください。

1
sergio

コメントで、UIStoryboardを使用していると述べました。 UIStoryboardSegueを知っていますか?セグエを確立するには、ボタンから次のView ControllerにControlキーを押しながらドラッグします。次に、遷移のタイプを選択できます。 「プッシュ」アニメーションを実行するには、ViewControllerがストーリーボードのUINavigationControllerの一部である必要があることに注意してください。

1
Mark Adams