0

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

[self.view addSubview:VC.view]; 

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

[VC viewWillAppear]; 

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

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

ответ

0

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

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

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

+0

Да - "соответствует". У VC есть связанный NIB, поэтому он должен быть ViewController. Я понимаю, что вы имеете в виду, что NIB создает экземпляр делегата tableview, но опять же, куда идет код scrollTo? – 4thSpace

+0

Когда/где родительский вызов VC: [self.view addSubview: VC.view]; – teabot

0


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

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

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

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