2010-12-02 15 views
2

私はUITableViewのカスタムサブクラスを作成しています。このオブジェクト自体が独自のデータソースとデリゲートである必要があり、このサブクラスは独自のデータソースとデリゲートを持ちます。これは主にデータソースへの呼び出しを代行して委譲し、実際のデータソースに送信する前にそれらを増強する可能性があるためです。uitableviewのカスタムサブクラスの問題

私のクラスは以下のように定義されています。

CustomTableView : UITableView<UITableViewDelegate, UITableViewDataSource> { 
    ... 
    id customDataSource; 
    id customDelegate; 
} 

データソースを設定してデリゲートしようとすると問題が発生します。

私はのUITableViewのプロパティをオーバーライドしたいと思います:

- (void)setDataSource(id<UITableViewDataSource>)ds { 
    [super setDataSource:self] 
    customDataSource = ds; 
} 

基本的に、私は自己へのデータソースを設定するには、親クラス(のUITableViewを)伝えたいと思います。その後、私はそれらを変更した後、任意のコールバックをcustomDataSourceに転送します。

[super setDataSource:self]はクラッシュしませんが、データソースは決して設定されません。誰にもアイデアはありますか?ありがとう

答えて

2

私はこの問題で提案された方法を使う必要がなくなりましたが、私はそれを働かせました。問題は、私が偶発的にオーバーライドが必要なプロパティ、つまりdataSourceとdelegateを合成したことでした。

今後これを行う必要がある場合は、カスタムサブクラスでsetDelegateとsetDataSourceをオーバーライドするだけです。

0

自己にデータソースを割り当てないでください。 CustomTableViewに格納されている中間オブジェクトを作成し、それにデータソースを設定します。それをDataSourceInterceptorなどと呼んでください。

これを達成するもう1つの方法は、設定されているデータソースオブジェクトをメソッドスウィズルすることです。