设置和保存UITextView滚动位置

时间:2015-05-19 20:25:37

标签: ios objective-c uiscrollview uitextview nsuserdefaults

我将不胜感激任何帮助。我四处看看,看到我可以使用contentOffset.y来解决这个问题,但没有具体的方法可以使用它。

我有一个UIViewControllerUITextView占据了整个屏幕。 UITextView由一个很长的.txt文件填充。 (想想书长)当用户返回到该视图时,如何找到textView的最后滚动位置,保存并将视图打开到同一位置?我猜想保存位置需要NSUserDefaults吗?

我见过用于:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

并将代码放入:

viewWillDisappear OR viewDidDisappear

viewWillAppear

但似乎没有任何事情可以解决我的情况。

请帮助noobie!

最新编辑:

这是最新的迭代。在评论中,我描述了当前情况,只要没有其他滚动,textview将保持在同一位置。例如,我运行应用程序,滚动位置是,例如{0,30281.5}。在不滚动任何内容的情况下,我导航到应用程序的不同部分,然后返回到滚动视图。它在现场{0,30281.5},正好在我离开它的地方。我关闭应用程序,再次运行它,同样的事情{0,30281.5}。但是如果我从那里滚动,那么当我离开页面时会记下新的滚动位置,并在我回到页面时再次注意到。它们都被记录为相同的新位置,但是文本视图不在我离开它的位置附近。我希望我解释了这一点。感谢任何看过这个的人!

@property (nonatomic, assign) CGPoint positionY;

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{

        [_readerTextView setContentOffset:self.positionY];
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        _positionY = CGPointFromString([defaults objectForKey:@"savePosition"]);

        _readerTextView.contentOffset = _positionY;
        NSLog(@"OFFSET LOCATION IS NOW: %@", NSStringFromCGPoint(_positionY));

    }];
} 

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    _positionY = _readerTextView.contentOffset;
    self.readerTextView.contentOffset = CGPointZero;
    [_readerTextView setContentOffset:self.positionY];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:NSStringFromCGPoint(_positionY) forKey:@"savePosition"];
    [defaults synchronize];

    NSLog(@"OFFSET LOCATION IS: %@", NSStringFromCGPoint(_positionY));   
}  

0 个答案:

没有答案