Это происходит потому, что вы унаследовали класс UITableView
, и эти методы не из UITableView
, а из UITableViewDelegate
.
Он работает на вашем контроллере, поскольку либо вы установили delegate
свойство вашего UITableView
, указывающее на ваш контроллер, или вы используете UITableViewController
, для которого делегат просмотра таблицы устанавливается автоматически.(На самом деле, в вашем случае, использование UITableViewController
хуже, потому что оно уже реализует UITableView
вместо вашего пользовательского класса).
EDIT: К сожалению, из-за используемого шаблона делегирования в UITableView
классе для изменения его представлений заголовка раздела не просто реализовать этот вид действия
Один из способов сделать это - предоставить эти «вспомогательные» методы в вашем классе, а затем реализовать делегат накаждый из ваших контроллеров должен правильно вызывать эти методы при запуске метода делегата.
Если этот подход приемлем, вам даже следует рассмотреть возможность использования категории с этими методами вместо того, чтобы создавать подклассы UITableView
, что сделало бы коднамного чище.
Очевидно, вы можете установить делегат UITableView
в качестве своего пользовательского класса, а затем создать еще один делегат для вызовов, которые вы все еще хотите выполнять на контроллере, например cellForRowAtIndexPath
, и затем вызватьэтот новый делегат методов, как только таблица запускает методы, но это, безусловно, худшийвозможное решение