web-dev-qa-db-ja.com

instantiateViewControllerWithIdentifier-ストーリーボードIDは設定されているが、まだ機能していない

プログラムでセグエを作成する必要がありますが、ボタンをクリックしてもView Controllerが次に変更されず、Storyboard IDが設定されていて、まだ機能していません。この作業を行うために他のチェックがありませんか?

以下のコードをご覧ください:

EntryViewController *entryController = [self.storyboard instantiateViewControllerWithIdentifier:@"go"];
[self.navigationController pushViewController:entryController animated:YES];

私を怒らせる。ありがとう

26
user2366782

ViewDidLoad内に、goldStarOpenを呼び出すボタンを配置しました。

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeCustom];
btnTwo.frame = CGRectMake(250, 20, 40, 40);
[btnTwo addTarget:self action:@selector(goldStarOpen) forControlEvents:UIControlEventTouchUpInside];
[btnTwo setImage:[UIImage imageNamed:@"GoldStar.png"] forState:UIControlStateNormal];
[self.view addSubview:btnTwo];

GoldStarOpenの中には、あなたのものとほとんど同じコードがあります。

- (void)goldStarOpen
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
                                @"MainStoryboard" bundle:[NSBundle mainBundle]];
    UIViewController *myController = [storyboard instantiateViewControllerWithIdentifier:@"GoldStar"];
    [self presentViewController:myController animated:YES completion:nil];
}

goldStarOpenは、ストーリーボードのViewControllerをアクティブにします。

ロードしようとしているView ControllerのストーリーボードIDを設定する必要がある場合があります。これは、カスタムクラスをビューコントローラーに割り当てるインスペクターのすぐ下にあります。

enter image description here

33
norman_h

使用する

 + (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil. 

だからこれを試して

self.storyboard=[UIStoryboard storyboardWithName:@"Your_Story_Board_Name" bundle:[NSBundle mainBundle]];
EntryViewController *entryController = [self.storyboard instantiateViewControllerWithIdentifier:@"go"];
[self.navigationController pushViewController:entryController animated:YES];
6
Lithu T.V

このストーリーボードを試してくださいUIViewController-> Xcode-> Editor-> Emabed In-> Navigation Controllerを選択してください

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"YourStoryboard"
                                                         bundle: nil];

YourViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier: @"YourViewController"];
[self.navigationController pushViewController:vc animated:YES];
4

これを試して、

 UIStoryboard *    storyboardobj=[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

 EntryViewController *entryController = [storyboardobj instantiateViewControllerWithIdentifier:@"go"];
[self.navigationController pushViewController:entryController animated:YES];
2
Kalpesh

今日、この問題に突入し、右側のパネルでストーリーボードIDを明確に設定しましたが、VCは到達不能であり、識別子が設定されていません。警告を受け取りました。 「ターゲットからモジュールを継承」と表示され、プロジェクトを実行したボックス。

enter image description here

コードが正常に実行された後、チェックボックスをオンまたはオフにして動作するようになったため、Xcodeのバグである可能性があります...とにかくこれが役立つことを願っています。

0
Andy

View Controller storyboardを設定することはできません。 View Controllerの作成時に読み取り専用で設定されます。代わりに、別の場所からストーリーボードを取得するか、ロードする必要があります。

AppDelegateのルートビューコントローラーからストーリーボードを取得できます。または、+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNilを使用します。

0
Wain