0

だから私はCPTableViewwithを持ってい2 columnsます。列にバインドCPTableViewされているおかげで、私は満たされています。Array ControllerCPTableView

テーブルビューを塗りつぶす方法を知っています。問題ありません。

私の問題は、セルの値を変更したいということです。もちろん、この値は配列コントローラーでも変更する必要があります。

そこで、セルをダブルクリックして新しい値を入力します。わかりましたが、値は配列で変更されていません。配列に変更するように指示していないため、これは正常です。

しかし、配列の値を変更するには、セルに書き込んだ新しい値を取得して配列に入れる必要があります。

私はこれを行うことができないか、これを行う方法がわかりません。

CPTableColumn メソッドを試してみましたdataCellForRowが、機能しません。デバッガーは を使用するように指示しますdataViewForRow。わかりました、私はそれを使用しますが、セルの値を取得すると、常に次のように返されます:「テキストセル」IBのセルに設定されたデフォルトのタイトル。

だから本当に私は自分がやりたいことをする方法がわかりません。

4

3 に答える 3

0

実際、それはうまくいきます、私は良い方法ではありませんでした..

セルの値が変更されたかどうかを確認するために、データを含む「CPArray」でそれを探しました。しかし、この配列は私の「CPTableView」にバインドされていません。バインドされているのは「CPArrayController」です。それで、これをチェックインしたところ、セルの値が正しく変更されていることがわかりました!

お時間をいただきありがとうございます。

于 2013-06-20T14:01:44.877 に答える
0

値が変更されたことを配列に伝えるようにしてください。そして、テーブルをリロードします。

次の手順を実行します。1) 値が変更されました。配列でそれを変更する 2) テーブルのリロード (UItableView には関数 reloadData があります)。また、テーブルのリロードで配列をバインドするため、テーブルが自動的に更新されます

于 2013-06-13T16:58:28.060 に答える
0

CPTableViewに適切にバインドされたを使用している場合はCPArrayController、テーブル セルの値を編集して変更をコミットすると、「リバース バインディング」によって自動的に更新されます。CPValueBinding各列がバインドされていることを再確認してください。

この手動テストを見てみましょう: Tests/Manual/ArrayController1Cappuccino レポジトリにあります。間違ったことを覚えていない場合は、これを実装します。

それが失敗した場合は、このテーブル ビュー デリゲート メソッドを使用して、いつでも手動で行うことができます。

tableView:setObjectValue:forTableColumn:row:

テーブルデリゲートに次のようなものを追加してみてください(テストされていません):

- (void)tableView:(CPTableView)tableView setObjectValue:(id)aValue forTableColumn:(CPTableColumn)tableColumn row:(int)aRow
{   
    var name = [tableColumn identifier];

    CPLog.info("Row %d of table column %@ changed to %@.", aRow, name, aValue);
    // ... change actual model here.
}

Tests/Manual/TableTest/Editingこの例については、Cappuccino リポジトリを参照してください。

于 2013-06-14T10:54:36.097 に答える