必要なのは、同じストーリーボードファイルのUIView
コントローラーをコードで手動で表示することだけです。ストーリーボードを使用して、すべてのフォームと接続を作成します。アプリケーションはNavigation Controllerで起動し、UIView
(LoginViewController
)へのアクセスを提供してから、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
私はあなたが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ファイルです。 :-)
こんにちは、このコードを使用してみてください
Storyboard put ID = "xxx * Name Desire"マークStoryboarIDを使用
UIStoryboard * storyboard = self.storyboard;
DetailViewController * detail = [storyboard instantiateViewControllerWithIdentifier: @ "xxx * Name Desire"];
[self.navigationController pushViewController: detail animated: YES];
この声明では:
[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の作成方法に関する詳細を入力してください。
コメントで、UIStoryboard
を使用していると述べました。 UIStoryboardSegue
を知っていますか?セグエを確立するには、ボタンから次のView ControllerにControlキーを押しながらドラッグします。次に、遷移のタイプを選択できます。 「プッシュ」アニメーションを実行するには、ViewControllerがストーリーボードのUINavigationController
の一部である必要があることに注意してください。