Установка позиции 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, который будет вызывать метод, но не будет иметь никакого эффекта.

Другие вопросы по тегам