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 中所有 uiscrollview 的大小

UICollectionViewCell与UIScrollView取消didSelectItemAtIndexPath

如何通过滑动向 UIScrollView 添加另一个页面?

何时使用 UITouch 与 UIScroll

OCUI界面设计:滚动视图与分页控件初探