Как перейти к строке таблицы? - PullRequest
0 голосов
/ 18 июня 2009

У меня есть UIViewController (названный VC), который наследуется от UITableViewDelegate и UIScrollViewDelegate. Предыдущий UIViewController загружает VC так:

[self.view addSubview:VC.view];

, что означает, что viewWillAppear не срабатывает. Я могу добавить этот метод сразу после строки выше:

[VC viewWillAppear];

но затем он сработает перед cellForRowAtIndexPath, что приведет к пустой ссылке на таблицу при попытке прокрутки.

Я бы хотел прокрутить до определенной строки в таблице при загрузке VC. Но поскольку я не знаю, когда завершится cellForRowAtIndexPath таблицы (отсутствие viewWillAppear), у меня нет места для размещения кода прокрутки. Я уже храню ссылку на просмотр таблицы и могу использовать ее для прокрутки. Но где я могу разместить код прокрутки?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2009


Конечно, когда новое представление контроллера представления добавляется и становится видимым, оно будет вызывать viewDidAppear, а не viewWillAppear. Я бы вставил туда код прокрутки.

Если это все еще не работает, попробуйте задержку в вашем методе инициализации. Примерно так:

[self performSelector:@selector(myScrollingFunction) withObject:nil afterDelay:2.0];

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

0 голосов
/ 18 июня 2009

Вы имеете в виду, что ваш UIViewController соответствует протоколам UITableViewDelegate и UIScrollViewDelegate, а не «наследует»?

Вы можете вызывать [VC viewWillAppear:] непосредственно из вашего родительского контроллера представления. Если представление, обрабатываемое VC, всегда является вложенным представлением представления другого контроллера представления, тогда действительно ли вам нужен полный экземпляр UIViewController для поддержки вашего UITableView? Вы можете просто предоставить делегат и реализацию источника данных для табличного представления.

Затем можно создать экземпляр вашего делегата и источника данных либо в NIB, который определяет представление таблицы (путем добавления объекта в Interface Builder), либо в методе viewDidLoad контроллера представления, который в настоящее время является родительским для VC.

...