Как перейти к строке таблицы?

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

[self.view addSubview:VC.view];

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

[VC viewWillAppear];

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

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


person 4thSpace    schedule 18.06.2009    source источник


Ответы (2)


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

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

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

person teabot    schedule 18.06.2009
comment
Да - соответствует. VC имеет связанный NIB, поэтому он должен быть ViewController. Я понимаю, что вы имеете в виду, говоря о том, что NIB создает экземпляр делегата tableview, но опять же, куда идет код scrollTo? - person 4thSpace; 18.06.2009
comment
Когда/где родительский VC вызывает: [self.view addSubview:VC.view]; - person teabot; 18.06.2009


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

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

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

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

person imnk    schedule 28.11.2009