これらのプロトコルに準拠するカスタム UITableView を使用しています。
- UITableViewDataSource
- UIScrollViewDelegate
このテーブル ビューは、アプリの多くの場所で使用されています。バックグラウンドでの画像ダウンロードを実装しました。ユーザーがスクロールすると、追加の画像がダウンロードされます。そのため、UIScrollViewDelegate メソッドを実装する必要がありました。これらのカスタム テーブル ビューのそれぞれがメソッドの同じ実装を使用するため、ビュー コントローラーではなく、このクラスに必ずこれを含めたいと考えています。
これが問題です。ビュー コントローラーでは、セグエを実行する必要があるため、UITableViewDelegate から didSelectRowAtIndexPath メソッドを実装する必要があります。しかし、それを行う (そしてデリゲートを自分自身に設定する) と、UITableView は UIScrollView (およびそのデリゲート メソッド) を拡張するため、UIScrollViewDelegate メソッドはこのビュー コントローラーによってキャッチされ、テーブル ビューに反映されません。
これを各View Controllerに追加することで「解決」しました:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[self.bookTableView scrollViewDidEndDragging:scrollView willDecelerate:decelerate];
}
しかし、この同じコード ブロック (参考までに、これはそのうちの 1 つにすぎず、他にもいくつかあります) をアプリ全体の多くの場所に配置することは、あまり良くありません。これを解決する方法はありますか?