проблема с пользовательским подклассом uitableview - PullRequest
2 голосов
/ 03 декабря 2010

Я пишу пользовательский подкласс 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 ]

2 голосов
/ 08 декабря 2010

В итоге мне не нужно было использовать метод, предложенный в этом вопросе, но я все же заработал.Проблема заключалась в том, что я случайно синтезировал свойства, которые необходимо переопределить, а именно dataSource и делегат.

Для людей, которым необходимо сделать это в будущем, просто переопределите setDelegate и setDataSource в своем пользовательском подклассе.

0 голосов
/ 03 декабря 2010

Не присваивайте источник данных себе. Создайте промежуточный объект, который содержится в вашем CustomTableView, и установите для него источник данных. Назовите его DataSourceInterceptor или что-то в этом роде.

Другим способом сделать это может быть метод swizzle объекта источника данных, который устанавливается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...