从另一个ViewController设置UIScrollView的位置

时间:2012-12-26 10:45:36

标签: objective-c ios uiviewcontroller uiscrollview contentoffset

我试图通过使用contentOffset来设置UIScrollView的位置:

- (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 个答案:

答案 0 :(得分:2)

试试这个,当你想要改变时,你必须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];
 }

答案 1 :(得分:1)

您无法设置不可见的视图的属性。如果您使用的是iOS5 +,则可以在视图关闭完成块中的完成中实现偏移设置。

答案 2 :(得分:0)

使用委托在视图控制器中进行后向消息传递。

有关详情,请参阅Basic Delegate Example链接。

你正在制作一个新的viewcontroller实例,它将调用方法,但不起作用。