32

プロジェクトに既存の ViewController + xib があり、次のように静的セルを含む UITableView を追加したいと考えています。

静的セルを含む TableView

しかし、UITableView を画面にドラッグすると、属性インスペクターに [コンテンツ] > [静的] メニューが表示されません。

コントローラーのサブクラス UITableViewController を作成しようとしましたが、役に立ちません。属性インスペクターで静的セルを使用するオプションがまだありません。

私は StackOverflow を見回しましたが、この質問に対する既存の回答は見つかりませんでした。既存のすべての質問は、xib ファイルではなく、ストーリーボード (私は使用していません) に関連しています。

私の推測では、UITableViewController をストーリーボードに追加すると、Xcode はある種の魔法を実行しますが、既存の xib を UITableViewController から継承するように変更するときはそうではありません。

静的セルを含むテーブル ビューを既存の xib に追加する方法についてアドバイスはありますか?

4

3 に答える 3

45

静的なテーブル ビュー セルは、ストーリーボードを使用している場合にのみ使用できます。ただし、UI 全体にストーリーボードを使用していない場合でも、画面のコレクションではなく個々の画面にストーリーボードを使用できます。

これを行うには、ファイルの所有者がカスタム ビュー コントローラー サブクラスに設定された単一のビュー コントローラーを含む UIStoryboard ファイルを作成します。VC の識別子を何らかの値に設定します。これを表示するには、ストーリーボードを取得し、ストーリーボードから VC を作成してビュー コントローラーのサブクラスをインスタンス化します。

UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"your storyboard" bundle:nil];
CustomViewController = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"custom identifier"];

この VC は通常どおりアプリで表示できます。

これは、ストーリーボードを使用するためにアプリ全体を変換する必要なく、ストーリーボードの使用を開始するための優れた方法です。

于 2012-06-14T21:33:58.617 に答える
27

これは、ストーリーボードなしで実行できます。

  1. コントローラーは、テーブルビューのデリゲートとソースのプロトコルを採用する必要があります... UITableViewDelegate、UITableViewDataSource
  2. .xib にテーブル ビューを追加します。テーブル ビューのスタイルを「グループ化」に設定します
  3. テーブルをコントローラーのプロパティに接続します (「yourTableView」と呼びましょう)
  4. テーブル ビュー セルを個別のビューとして .xib に追加します。つまり、テーブル ビューのサブビューとしてではなく、.xib 内で自由にフローティングできます。(下の例の画像を参照)
  5. コントロール/ラベルなどを表のセルに追加します。
  6. 各テーブル ビュー セルの属性の「識別子」フィールドに一意の文字列を割り当てます。
  7. 表のセルをコントローラーの他のプロパティ (sliderCell、switchCell など) に接続します。
  8. セルのコントロールの送信イベントを、コントローラーの IBAction-ed メソッド ((IBAction) handleSliderCell など) に接続します。
  9. コントローラーの viewDidLoad メソッドで、テーブル ビューのデリゲートとソースをコントローラーに割り当てます (self.yourTableControl.delegate = self; self.yourTableControl.dataSource = self;)。
  10. コントローラーに numberOfSectionsInTableView、numberOfRowsInSection、cellForRowAtIndexPath を実装する
  11. tableView:cellForRowAtIndexPath: で、適切な indexPath 値の yourFirstCell、yourSecondCell などのポインターを返します

テーブル セルのコントロールのイベントは、ハンドラー ルーチンに送られる必要があります...

ステップ 4 の例: シブ

于 2012-12-05T16:52:44.113 に答える
0

BVB の回答を拡張するために、番号 10 に関しては、テーブルビュー デリゲート メソッドの Swift 3 スニペットを次に示します。xib 内のすべてのセルに必ずアウトレットを追加してください。

テーブル ビュー セクションを手動で作成する場合、indexPathはテーブル構造を表す 2 次元配列に等しいことに注意してください。たとえば、が にindexPath渡されるtableView(cellForRowAt indexPath: IndexPath)[1][0]、セルは 2 番目のセクションの最初の位置に配置されます。

indexPath値は、プロパティindexPath.rowおよびから引き出すことができますindexPath.section。これらの値を使用して、任意の順序で IBOutlets からセクションを手動で構築できます。

@IBOutlet var is_enabled: UITableViewCell!
@IBOutlet var is_public: UITableViewCell!

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    switch(section){
        case 0:
            return "Cell 1"
        case 1:
            return "Cell 2"
        default: return ""

    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 2
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print("index path here", indexPath)
    if(indexPath.section == 0)  {
        return is_enabled
    }
    else if(indexPath.section == 1) {
        return is_public
    } else {
        return is_enabled
    }
}
于 2016-11-29T18:55:25.643 に答える