ページ 11

Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月22日(金) 10:33
by obott
ストーリボードで作ったファイルの中から以下の様に別の手書き(全てコードで構成)のViewControllerを呼び出していますが、、
呼び出され側のinit関数のみが呼ばれて、viewDidLoadは呼ばれませんし、画面の遷移も起きません。

コード:


- (IBAction)Test0Pushed:(id)sender		{
//		Test0ボタンハンドラ
	UIViewController* viewController = [[O_Test0ViewController alloc] init];
	if ( viewController != Nil ) {
		[self.navigationController pushViewController:viewController animated:YES];
	}
}

ストーリボードと手書きの画面を一つのプログラムにしたいと思っています。
ストーリボードは全くの初心者です、、今までは全て手書き(全てコードで構成)の画面で作成してきました。

何かおまじないが必要なのでしょうか?

ご存知の方よろしくお願いします。

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月22日(金) 11:29
by h2so5
このコードだけでは何とも言えませんが、
とりあえず self.navigationController がnilではないかどうか確かめたほうがいいと思います。

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月22日(金) 11:53
by obott
h2so5さん

レスありがとうございます。

確かにself.navigationControllerがNilでした。

ストーリーボードでは、ナビゲーションコントローラは使われていないのでしょうか?

まるでナビゲーションバーの様な物が表示されているし、最初から用意されている[info]ボタンで
遷移する先にもナビゲーションバーの様な物が表示されている(iPhoneの時のみiPad時はPopverになる)ので、、、、
てっきり有る物だと思い込んでました。

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月22日(金) 13:42
by obott
困りました、、、、

なんとか、エラーが発生しない場所でnavigationControllerを作成し、、

呼び出し側のviewDidLoadで以下の様に作成しました

コード:

	m_navController = [[UINavigationController alloc] initWithRootViewController:self];
実際にnavigationControllerに値が入っていることを確認しても

コード:

  - (IBAction)Test0Pushed:(id)sender      {
//      Test0ボタンハンドラ
  UIViewController* viewController = [[O_Test0ViewController alloc] init];
    if ( viewController != Nil ) {
	if ( self.navigationController != Nil ) {
		[self.navigationController pushViewController:viewController animated:YES];
	} 
    }
}
>呼び出され側のinit関数のみが呼ばれて、viewDidLoadは呼ばれませんし、画面の遷移も起きません。

どなたか、、ご存知の方、、宜しくお願いします

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月22日(金) 18:10
by h2so5
もうちょっと広い範囲のコードがないと何とも言えません。

あと、
obott さんが書きました: 実際にnavigationControllerに値が入っていることを確認しても

コード:

  - (IBAction)Test0Pushed:(id)sender      {
//      Test0ボタンハンドラ
  UIViewController* viewController = [[O_Test0ViewController alloc] init];
    if ( viewController != Nil ) {
	if ( self.navigationController != Nil ) {
		[self.navigationController pushViewController:viewController animated:YES];
	} 
    }
}
と書かれていますが、このコードは最初のコードと最終的な動作が全く変わっていないというのは理解していますか?

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月23日(土) 00:15
by obott
> と書かれていますが、このコードは最初のコードと最終的な動作が全く変わっていないというのは理解していますか?
何か変えないとだめなのですか?

生きているViewControllerから生きていると思われるNavigationControllerにpushViewControllerを指示しているのですから
ストーリーボードではない、手書きのViewControllerからのコールだと確実に実行されるコードです。

私にとっての問題点はストーリーボードで作成したViewControllerから別の手書きのViewControllerに画面遷移がしたい
けれども、ストーリーボードではない時に確実に実行されるコードを書いても画面遷移がおこらないと言うこと
だけなのです。

あなたのしゃべり方が理解できていないので、、、
普通は、、問題点を理解している人、、これはこう変えないとだめだとか把握している人がそうおっしゃるのなら、、、
仮にそうだとしても、、もし解っているのならはっきり問題点を指摘してよと言いたいですね
もし、万が一問題点が理解できていないのなら、、、いらない突っ込みは、、、、

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月23日(土) 01:13
by h2so5
ストーリーボード上でNavigationControllerを使うには明示的に埋め込まないといけないみたいですね。

http://stackoverflow.com/questions/9979 ... tory-board

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月23日(土) 10:27
by obott
いろいろと格闘していたのでレスが遅れました。

この掲示板での他人のレスの取り込み方が解らないので、、以下の様にしか表示出来ません。

>ストーリーボード上でNavigationControllerを使うには明示的に埋め込まないといけないみたいですね。
そうですね、、ストーリーボードにあるNavigationControllerは、UITableViewControllerが組み込まれた物しかないみたいですね。
テーブルビュー以外はNavigationControllerを使わなくてもストーリーボードにある機能で実現出来るという思想の様です。
ったく、、

色々調べた結果
NavigationControllerを作成したたけでは駄目で、Windowに登録しないと表示されない様でした、、これは本来の仕様の様です。
ここで言うWindowとは[[UIApplication sharedApplication] keyWindow]でとれるもの、、通常のUIViewControllerならself.view.superviewがさしている物です。

また、ストーリーボードが作った物はself.viewにNavigationBarを表示しているので、、
その中からタイトルと「Info」ボタンをself.navigationControllerになんとかコピーしても、、、
viewDidLoad内で[self.navigationController setNavigationBarHidden:YES]をしても、表示されないという、、、、
なんともな、、、状態で仕方がないので、、、
立ち上がり時のナビゲーションバーと手書きViewControllerから戻った時のナビゲーションバーは違う物と
いうことにしました。

一応不細工ながら首題のストーリボードから手書きのViewControllerを呼びたいは実現出来ました。

Re: Objective-c iOS5でストーリボードから手書きのViewControllerを呼びたい

Posted: 2012年6月23日(土) 20:16
by obott
あまりにひどい誤字を見つけたので追記します。。。参照の方法わかりました。
obott さんが書きました: viewDidLoad内で[self.navigationController setNavigationBarHidden:YES]をしても、表示されないという、、、、
[self.navigationController setNavigationBarHidden:NO]です。