0

私は iPhone の開発を行っており、ストーリーボードを使用してモックアップを作成し、開発を促進しています。

私は従来のやり方から来たのではありません。そうしなければなりませんか?

とにかく、私は絵コンテを持っています、

                                                          TableViewController
NavigationController->ViewController->TabViewController [
                                                          AnotherViewController

ただし、行アイテムをクリックすると他のビューに表示されるように、TableViewController にアタッチされた新しい ViewController を追加したかったのです。

  1. 新しいViewControllerをTableViewControllerに接続する方法が見つかりません(逆も同様です)

だから私は従来の方法で物事をやろうとしました

didSelectRowAtIndexPath:(NSIndexPath *)indexPath

私はffを置きます:

CViewController *controller = [[CViewController alloc] initWithNibName:????? bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];

属性インスペクターでコントローラーに識別子を与えようとしましたが、機能せず、次のクラッシュ スタックが表示されます。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/paulvincentong/Library/Application Support/iPhone Simulator/5.1/Applications/A1C369F8-9EAD-4794-8861-945C73F7FE0B/SyncProto.app> (loaded)' with name 'ControllerViewName' 

識別子を削除すると、no NibName 例外が発生します。

私は何をすべきか?関連するコントローラーの 4 つのレベルまで行くことができたのと同じである必要があることはわかっていますが、頭の後ろに混乱している何かがあるかもしれません...

ティア、

4

3 に答える 3

0

いろいろ遊んだ後...質問に対する適切な答えを見つけました。

私の問題は次の原因のようです

  1. 混乱 - 新しいプログラマーのジレンマ.. 質問はよくあることですが、自分で試してみて実際にそうであることがわかるまで、既存のものと実際に同じであるかどうかを実際に逸脱することはできません。

解決策は場合によって異なります。そして私のために、私はffをやろうとしました:

アプローチ1:(「instantiateViewControllerWithIdentifier」を使用)セグエ矢印

  1. 追加するビューを作成します
  2. セグエをトリガーするNib 要素ソース ビュー コントローラーにマウス ポインターを置き、コントロールを押したままにします。
  3. マウスを目的のView Controllerにドラッグします
  4. ポップアップが表示され、セグエのタイプ (プッシュ、モーダル、カスタム) を選択すると、自動的に xcode が必要な接続を作成します
  5. 宛先View Controllerを選択し、Attribute InspectorにIdentifierフィールドを持つ折りたたみ可能なグループがあります->このフィールドに、ビューのカスタム識別子を配置します

したがって、ソース コードは次のようになります。

ViewController *view = [self.storyboard instantiateViewControllerWithIdentifier:@"CustomViewName"];
[self.navigationController pushViewController:view animated:YES];

アプローチ 2: (「instantiateViewControllerWithIdentifier」を使用) セグエ矢印なし

  1. 追加するビューを作成します
  2. 新しいコントローラーに必要な識別子を提供すると、準備完了です
  3. 上で定義したものと同じソースを使用する

ただし、このアプローチを使用すると、ストーリーボードの一貫性が失われます。なぜこれを使用するのですか? (まだ見つけなければならないことです)、機能しているとはいえ、決してそこになかったセグエ矢印を探し始めると、それは明らかではありません。

このコードは、私が????という名前のペン先を持っていないという理由で機能しません。

CViewController *controller = [[CViewController alloc] initWithNibName:????? bundle:nil];
[self.navigationController pushViewController:controller animated:YES];

そして、それはストーリーボード上にあり、すべてがストーリーボードを使用して行われたと仮定しているため、nibName について忘れる時が来ました..

このアイデアがいくつかの人に役立つことを願っています...

学習は徹底的なプロセスですが、非常に興味深いことです...

ありがとう。

于 2012-11-21T05:06:57.743 に答える
0

あなたのcellForRowでこれを試してください

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  
*)indexPath{

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" 
bundle:nil];

ViewCont * view = (ViewCont *) [storyboard   
     instantiateViewControllerWithIdentifier:@"view"];

[tableView deselectRowAtIndexPath:indexPath animated:YES];  

[self view animated:YES completion:nil];

}

プロジェクトマネージャーでもストーリーボードを設定していることを確認してください。

于 2012-11-20T02:20:39.490 に答える
0

IBを使用していますか?そこに直接ドラッグできます。

それ以外の場合、ストーリーボードでは、指定したプッシュ メソッドを使用しません。performSegueWithIdentifier を使用します。ストーリーボードはセグエに関するものです。直接セグエすることも、ターゲット アクションを使用することもできます。

ここでも、ストーリーボードの強みは視覚的な表現にあります。IB を使用します。

それ以外の場合は、委任 (iPad 用の ESP) も検討できます。

于 2012-11-20T03:11:17.247 に答える