Как вызвать метод внутри viewController из didSelectRowAtIndexPath
У меня есть метод внутри моего viewController (MainViewController.m), который принимает параметр (скажем, он меняет цвет фона viewController на основе числа):
-(void) methodThatDoesSomething:(int)indexNumber {}
Внутри этого viewController у меня есть UITableView, но делегатом этой таблицы является другой класс (TableDelegateClass.m). Так что внутри этого класса у меня есть didSelectRowAtIndexPath.
Как мне вызвать "methodThatDoesSomething" из didSelectRowAtIndexPath? Если я сделаю это так:
MainViewController* mainView = [[MainViewController alloc] init];
[mainView methodThatDoesSomething:indexPath.row];
Не работает Поскольку другой экземпляр класса создан, и это не после viewController, который я в настоящее время использую.
Я легко могу сделать это, если делегатом таблицы является MainViewController (только с этим кодом внутри didSelectRowAtIndexPath):
[self methodThatDoesSomething:indexPath.row]
но я хочу лучше организовать код и иметь разные классы, один для таблицы и другой для viewController, содержащего таблицу.
2 ответа
Одним из простых решений может быть определение собственного протокола делегата для -(void) methodThatDoesSomething:(int)indexNumber {}
так что вы можете установить TableDelegateClass
делегировать ваш viewController, а затем вызвать [delegate methodThatDoesSomething:indexPath.row];
(после проверки respondsToSelector
). Вы также можете передать экземпляр viewController при создании TableDelegateClass
но это более высокий уровень связи, чем делегат.
Одним из способов решения вашей проблемы является создание свойства типа MainViewController в классе делегата и назначение ему экземпляра контроллера.
Но, может быть, эта проблема - индикатор того, что делегат tableView действительно должен быть MainViewController, а не другим классом?