15

ストーリーボードにビューを作成しましたが、静的テーブルセルを介してデータを表示することにしました。

UIViewController( )で静的テーブルビューを使用できませんStatic table views are only valid when embedded in UITableViewController instancesUIViewControllerだから、UITableViewControllerどういうわけか既存のものを変換する必要があります。.hファイルの親を変更しましたが、変更されていません。

これを実現する別の方法はありますか?ストーリーボードに新しいVCを作成してすべてを移動する必要はありません。これは、非常に面倒です。

4

3 に答える 3

18

質問はUIViewControllerをUITableViewControllerに変更する方法に関するものであり、この質問は1年以上前のものであり、元の回答であり、有効であり、唯一の解決策である場合とそうでない場合があるため、これに追加します。時間は、実際には質問に答えず、唯一の解決策ではありません。

これを行うことは可能です。IBでテーブルビューデリゲートとデータソースアウトレットを設定し、ストーリーボードXMLを手動で編集するだけです。これは恐ろしいように聞こえますが、実際には非常に簡単です。

まず、クラスの親をUITableViewControllerに変更します。UITableViewControllerはすでにUITableViewDatasourceプロトコルとUITableViewDelegateプロトコルを採用しているため、クラスも採用している場合は、それらを削除できます。

@implementation MyTableViewController : UITableViewController
...
@end

次に、UITableViewにdataSourceとデリゲートの新しい参照アウトレットを作成します。これを行う最も簡単な方法は、UITableViewからそれ自体にcontrol-dragすることです。ポップアップには、dataSourceおよびdelegateオプションが表示されます。

最後に、ストーリーボードのXMLを変更する必要があります。ストーリーボードファイルはかなり速く大きくなる可能性があります。探しているシーンを見つける最も簡単な方法は、IDインスペクターでストーリーボード識別子を設定することです。XMLを直接表示するには、プロジェクトナビゲータでストーリーボードファイルを右クリックし、[名前を付けて開く]->[ソースコード]を選択します。ここで、以前に再利用識別子を設定したものを検索します。次のようなものが表示されます。

<!-- My Table View Controller -->
<scene sceneID="EuE-XX-cCb">
  <objects>
    <viewController storyboardIdentifier="MY_TABLE_VIEW_IDENTIFIER" ... >
      // Lots of other stuff
    </viewController>
  </objects>
</scene>

ビューコントローラの開始タグと終了タグを変更するだけです。

<viewController>
</viewController>

代わりにtableViewControllerになります

<tableViewController>
</tableViewController>

それでおしまい!新しいUITableViewControllerシーンを作成したり、コンテナビューにUITableViewControllerを埋め込んだりする必要はありません。

編集:

また、UITableViewはルートビューでなければならないことも追加する必要があります。別のUIView内に埋め込むことはできません。

于 2014-04-07T16:42:36.677 に答える
13

静的セルテーブルビューが画面全体を占めないようにする場合は、コンテナビューを使用するのが最も簡単な方法です。通常のUIViewControllerから開始し、コンテナビュー(オブジェクトリストの通常のUIViewの横)をそのビューにドラッグします。必要に応じてサイズを変更します。ストーリーボードは、このコンテナビューに接続されたビューコントローラに埋め込みセグエを自動的に提供します。そのコントローラーを削除し、テーブルビューコントローラーをドラッグして、コンテナービューからこのテーブルビューコントローラーに右ドラッグして、新しい埋め込みセグエを作成します。このテーブルビューコントローラーには、そのchildViewControllersプロパティを使用してUIViewControllerからアクセスできます(逆に、必要に応じて、parentViewControllerを使用してテーブルビューコントローラーからUIViewControllerにアクセスできます)。

于 2012-12-19T18:20:50.863 に答える
1

私が行ったことは、IBでUITableViewControllerを作成し、テキストエディターでストーリーボードを開き、内部のすべてのノードをUIViewControllerからUITableViewControllerにコピーすることです。

このようにすれば、重要なものを削除するリスクが少なくなると思います。

セクションオブジェクトをコピーする前に、両方のテーブルビュー(UIViewControllerとUITableViewController)に、静的セルまたは動的セル、スタイル(プレーンまたはグループ化)などの同じプロパティが設定されていることを確認してください。

于 2016-03-26T19:14:35.077 に答える