2

Noob Xcode の質問はこちら。

基本的なマスター/ディテールのセットアップがあります。

マスター リストの項目を選択すると、詳細ページが更新される代わりに、詳細が表示された 2 番目の「マスター」サイドバーが表示されます。

だから私はこれから始めます:

「Nick Jones」をクリックすると、次のようになります。 ここに画像の説明を入力

ストーリーボードは次のようになります。 ここに画像の説明を入力

しかし、Master View Controller をクリックすると、Detail View Controller のサイズが次のように変更されます。 ここに画像の説明を入力

チュートリアル「Your Second iOS App」チュートリアルを (iPhone ではなく) iPad に適応させようとしています。キーセグエページはこちら. ナビゲーション コントローラーと詳細ビュー コントローラーの間のセグエ リンクを再確立しました。

ありがとう。

4

1 に答える 1

3

いくつかの観察:

  1. 明らかな問題は、マスター ビュー コントローラーから詳細ビュー コントローラーへのセグエの種類です。それは「置換」セグエである必要があり、そのセグエを選択して属性インスペクターをクリックするときは、「詳細分割」の宛先を指定してください。

    詳細分割

  2. 余談ですが、UI でストーリーボードが少し混乱している理由は、その詳細ビュー コントローラーに 2 つのセグエがあるためです。シーン)、およびマスター ビュー コントローラーからの別のもの (したがって、詳細シーンの誤った狭い形状)。可哀想な Interface Builder は、おそらく「ねえ、このシーンを分割ビューの詳細として、またはマスター ビュー コントローラーの代わりとして使用する必要がありましたか?!?」と考えています。前のポイントはこの矛盾を解決しますが、現在のストーリーボードで、現在選択しているシーンに基づいて詳細シーンの形状が変化する理由はこれで説明できます。

  3. このようにする場合は、マスター シーンから詳細シーンへのセグエを、詳細シーン自体ではなく、実際にマスター シーンからナビゲーション コントローラー シーンに移動することをお勧めします。

    ナビゲーションコントローラーに移動

  4. ただし、率直に言って、セグエを修正する方法を説明したので、セグエを使用するべきではありません! 空白の新しい「master-detail」プロジェクトを作成し、その動作を確認します。次のようになります。

    ここに画像の説明を入力

詳細ビュー コントローラーを別のシーンに変更する場合は、マスター シーンから詳細シーンへのセグエのみが必要です。しかし、あなたはそうしていません。おそらく、参照しているオブジェクトが変更され、変更すべきであることのみを詳細ビュー コントローラーに伝えたいと思うでしょうreloadData。また、詳細ビュー コントローラー自体がテーブルビューであることを考えると、マスター ビュー コントローラーには次のようなメソッドがあります。(b) に伝えるreloadData。したがって、次のようになります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDate *object = _objects[indexPath.row];
    self.detailViewController.detailItem = object;

    [self.detailViewController.tableView reloadData];
}

どちらの方法でも機能させることができますが、後者のアプローチの方が理にかなっていると思います。

于 2012-12-09T03:19:42.033 に答える