2009-12-08 91 views
0

我在屏幕上有一个UIScrollView。iPhone + UIScrollView

滚动视图包含UIButtons视图。

问题是,当滚动视图时,如果我按下滚动视图之间的任何按钮将弹出到屏幕的顶部或底部,这意味着它不会保留在我按下按钮的位置。

+0

嘿,伙计!你介意把你的注意力引到你自己的问题上,并对艾伦和我给你的答案发表评论吗? – 2010-01-17 21:09:57

回答

2

看看UIScrollViewDelegate类。当滚动开始时,您想要禁用按钮,而滚动则开始启用它。

+0

你喜欢某种类型的传心术,猜测作者从第一次拍摄中真正在说什么...... :) – 2010-01-24 19:54:30

+0

我希望。 :)这更多的是“在那里,做到了这一点”的问题,并不想看到别人承受了这个问题。 – 2010-01-25 04:05:24

0

如果我理解正确,你的按钮是在滚动视图内?当按下时,你希望他们停止滚动或将滚动视图移动到特定点?如顶部或底部?如果是这样,请使用myScrollView.contentOffset = CGPointMake(0, 0);并指定您需要的x和y值。所以这个例子中的(0,0)就是左上角。

如果要为此转换设置动画,您可能还想尝试[myScrollView setContentOffset:CGPointMake(0, 0) animated:YES];

1

我复制你在你的问题已经描述的情况(至少我是这么认为的):一个UIScrollView的的UIScrollView与UIView的内部的里面的UIButton一个UIView。

我尝试了轻敲触摸滚动视图,并将我的手指移过按钮,并没有得到它反弹到顶部或类似的东西。我也试过在滚动滚动后点击按钮,它也没有副作用。

所以我的猜测是,你正在处理的是这样的:一个UINavigationController与你UIScroll-UIView-UIButton UIViewController作为一个根视图控制器;在被轻敲之后,UIButton将一个新的UIViewController推送到UINavigationController;那么你回到UINavigationController堆栈中的前一个UIViewController,这是当你失去了滚动位置。

如果我的猜测是正确的,那么这里是你需要做的。

前推一个新的UIViewController为您节省滚动视图的当前内容与下面的代码偏移:

[[NSUserDefaults standardUserDefaults] setObject:NSStringFromCGPoint(theScrollView.contentOffset) forKey:@"ScrollViewLastContentOffset"]; 

而且你回到你以后的UIScrollView的UIViewController使用下面的代码在你viewWillAppear中:方法:

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

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults stringForKey:@"ScrollViewLastContentOffset"] != nil) { 
    theScrollView.contentOffset = CGPointFromString([defaults stringForKey:@"ScrollViewLastContentOffset"]); 
    [defaults removeObjectForKey:@"ScrollViewLastContentOffset"]; 
} 
} 

即使我猜错了,请评论我和艾伦的回答,并确认/驳回他们,以便我们能够帮助你。你还介意提供关于你的问题的更多细节,所以我们不需要猜测到底发生了什么。