UIScrollView 显示为零?
Posted
技术标签:
【中文标题】UIScrollView 显示为零?【英文标题】:UIScrollView showing nil? 【发布时间】:2015-03-04 11:29:29 【问题描述】:我有一个带有 UIPageViewController 的示例项目。在我的第一页(pageviewcontroller:类名-step1Controller)中有一个“继续”按钮。当我点击该按钮时,我需要滚动第一页并显示第二页(而不是在这里滑动点击按钮将更改页面)。
所以在按钮单击时我调用了自动滚动的方法,不幸的是它显示我的 uiscrollview 框架为零。??我该如何解决这个问题?请帮忙
我附上了项目的副本(它是一个 200kb 的小文件)
我的代码结构是这样的
ViewController (click on "add" button open second viewcontroller)-->MainController (here i have uiscrollview and uipageviewcontroller connected to 6 pages).
When i click "Continue" green button from first page it should auto scroll and sho the second page.
请帮忙。
Code on first page of pageview
- (IBAction)continueButton:(id)sender
Controller=[[MainController alloc]init];
//calling viewcontroller method were we created scrollview
[Controller moveToNextPage:1];
in MainController
-(void)moveToNextPage:(int )page
NSLog(@"%@",str);
self.pageControl.currentPage=2;
NSLog(@"frame: (%0f %0f; %0f %0f)",
self.scrollViewDrug.frame.origin.x, self.scrollViewDrug.frame.origin.y,
self.scrollViewDrug.frame.size.width, self.scrollViewDrug.frame.size.height);
CGRect newFrame=CGRectMake(320*page,self.scrollViewDrug.frame.origin.y,self.scrollViewDrug.frame.size.width, self.scrollViewDrug.frame.size.height);
[self.scrollViewDrug scrollRectToVisible:newFrame animated:YES];
代码链接
code
【问题讨论】:
如果您有 UIPageViewController,请使用它提供的方法:developer.apple.com/library/ios/documentation/UIKit/Reference/…:您在数组中添加新的 viewController 并将它们传递给此函数。而不是自己做scrollView的计算。如果您想继续使用 UIScrollView,请向我们展示您初始化 scrollView 以及设置框架的代码。 inside viewdidload .... scrollViewDrug=[[UIScrollView alloc]initWithFrame:CGRectMake(2,70,307,496)]; scrollViewDrug.showsVerticalScrollIndicator=YES; scrollViewDrug.scrollEnabled=YES; scrollViewDrug.userInteractionEnabled=YES; 只是一个建议:改变你的信息,只用 3 行来解释你想要什么,并添加更多代码以便我们更好地了解正在发生的事情,而不是发布链接并要求下载一些东西.也许您的信息将来可以帮助其他人。 我已经添加了整个项目,所以我想你可以理解 做你想做的。但是看看 SO 中的数千个问题,看看它是如何工作的。您在消息中添加代码,以便其他人可以从中受益。您不会看到有一千人下载您的链接。但是,如果您将代码放入消息中,他们可以回答,其他人将从中受益。但如果你不想,就不要这样做。 【参考方案1】:您正在从 MainController 创建 6 个视图控制器,然后单击 Continue 按钮,您将再次创建 MainController 的对象,认为它将引用您创建这 6 个对象的同一对象。然而事实并非如此,这个新的 MainController 是全新的对象,其组件仍未初始化。这就是您的滚动视图和任何其他变量在此处为 nil 的原因。解决方案:在子控制器中使用 Protocol,创建一个delegate 并回调 MainController 以进行页面转换。
【讨论】:
互联网上有很多关于委托模式的例子。只需搜索基本教程并首先了解该概念。然后你就可以在你的项目中实现它了。 我不认为这是一个答案,所以请将此作为评论 这是对您的问题的一个完全有效的答案,您只问为什么滚动视图会出现 nil。 我不是强迫你接受答案。我所说的是我解决了你的问题并为你指出了正确的方向。可以在没有代码剪切或精确解决方案的情况下给出答案。花一些时间了解委托协议模式,您就会明白我在解决方案部分所说的内容。以上是关于UIScrollView 显示为零?的主要内容,如果未能解决你的问题,请参考以下文章
调整容器 uiscrollview 中所有 uiscrollview 的大小