Установка позиции UIScrollView из другого ViewController
Я пытаюсь установить положение UIScrollView с помощью contentOffset как так:
- (void) navigateToTableViewPosition:(CGPoint)contentOffset {
NSLog(@"Position set method gets called...");
NSLog(@"%@", NSStringFromCGPoint(contentOffset));
[mainScrollView setContentOffset:contentOffset animated:YES];
}
Я вызываю этот метод из другого контроллера представления прежде, чем я отклоняю его, и все проверяется. Я передаю аргумент правильно, и метод вызывается (проверил его с помощью NSLog), но представление прокрутки не перемещается...
Что смешно, так это то, что когда я вызываю этот метод из контроллера представления, в котором он находится, он работает нормально. Только когда я вызываю его с другого контроллера представления, он перестает работать.
Просто для дальнейшего использования, вот метод вызова:
MainViewController *mainView = [[MainViewController alloc] init];
[mainView navigateToTableViewPosition:contentOffset];
Смещение контента - это CGPoint, который я установил заранее. Здесь не важно; кроме того, это проходит правильно в любом случае.
3 ответа
Попробуйте это, Вы должны send notification
От других viewcontroller
когда вы хотите изменить..
[[NSNotificationCenter defaultCenter] postNotificationName:@"changepostion" object:NSStringFromCGPoint(CGPointMake(contentOffset.x, contentOffset.y))];
в mainviewcontroller
-(void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(navigateToTableViewPosition:) name:@"changepostion" object:nil];
}
- (void) navigateToTableViewPosition:(NSNotification *)notification
{
contentOffset =CGPointFromString([notification object]);
NSLog(@"Position set method gets called...");
NSLog(@"%@", NSStringFromCGPoint(contentOffset));
[mainScrollView setContentOffset:contentOffset animated:YES];
}
Вы не можете установить свойства вида, который не виден. Если вы используете iOS5+, вы можете реализовать настройку смещения в завершении в блоке завершения завершения просмотра.
Используйте делегат для обратной передачи сообщений в контроллерах представления.
См. Ссылку на базовый пример делегата для получения дополнительной информации.
Вы создаете новый экземпляр view controller, который будет вызывать метод, но не будет иметь никакого эффекта.