0

ストーリーボード シーンで静的セルを使用してテーブル ビュー コントローラーを定義しました。テーブル ビュー自体には 6 つのセクションがあり、各セクションには 1 つまたは 2 つのセルが含まれています。ビュー コントローラーのこのメソッドからセルにデータを書き込みます。

- (void)setUpAllCells
{
    //Charge Name
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
    TableViewCellTextField *currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path];
    [currentTextField.textField setDelegate:self];

    //Charge Description
    path = [NSIndexPath indexPathForRow:1 inSection:0];
    currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path];
    [currentTextField.textField setDelegate:self];

    ...

    path = [NSIndexPath indexPathForRow:0 inSection:5];
    TableViewCellControl *currentControl = (TableViewCellControl *)[[self tableView] cellForRowAtIndexPath:path];
    [currentControl setValue:m_data->trailBurnTime];
}

次から呼び出されます:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setUpAllCells];
}

アプリケーションを実行すると、最後のセクションを除いて、各セルが期待どおりに応答します。
最後のセクションのセルはコントローラーに接続されておらず、ストーリーボード シーンのデフォルト値を保持しています。setUpAllCells にブレークポイントを設定したところ、最後のセクションで cellForRowAtIndexPath が nil を返していることがわかりました。

私はこの形式を他の 5 つのビュー コントローラに使用しましたが、このようなことはありませんでした。

これが私がこれまでに試したことです:

  • これを独自のカスタム TableViewCells でテストし、それらが機能しない場合は標準の UITableViewCells をテストしました。最後のセクションは常に nil を返します。

  • セクションとセルを再配置しました。最後のセクションは常に nil を返します。

  • その部分を完全に削除しました。他のセクションは、それがなくても正常に機能します。

  • さらにセクションを追加しました。セクション 5 以降は、CellForRowAtIndexPath で nil を返します。

私はここで途方に暮れています。何が原因なのかわかりません。

提案?

4

2 に答える 2

1

なぜ結果が得られるのかわかりません-試してセルをログに記録したところ、最初の3つのセクションで有効なセルしか取得できませんでした。セクション 2 を過ぎたものはすべて null でした。率直に言って、これがなぜ機能するのかまったくわかりません。なぜなら、これは Apple が静的なテーブル ビューに入力する方法ではないからです。テーブル ビュー コントローラーで、セル内の UI 要素に対して IBOutlets を作成する必要があります。この点で、静的テーブル ビューは、テーブル ビューよりも、サブビューを含むスクロール ビューのように機能します。また、個々の UI 要素ではなく、セル自体に IBOutlets を作成し、ドット表記を使用して、カスタム セル内の任意のプロパティ、または textLabel や detailTextLabel などの標準のプロパティを指定することもできます。

于 2013-05-23T01:36:05.973 に答える
0

あなたの質問に関する面白い話は、テーブルビューで関数 cellForRowAtIndexPath を呼び出すと、TableView に cellForRowAtIndexPath を提供する UITableViewDelegate として実装するデリゲート コールバック関数を呼び出すと思います。

その関数を実装すると、セルが返されます。あなたが探している機能は次のとおりだと思います:

– dequeueReusableCellWithIdentifier:forIndexPath:
– dequeueReusableCellWithIdentifier:

ここを見てください:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

それはおそらくあなたが探していた答えではないことはわかっていますが、それは真実です:)。

于 2013-05-23T00:29:23.557 に答える