在uiscrollview中的多个uiview之间传递数据

Posted

技术标签:

【中文标题】在uiscrollview中的多个uiview之间传递数据【英文标题】:Passing data between multiple uiview in uiscrollview 【发布时间】:2014-03-25 20:07:18 【问题描述】:

我有一个包含 uiscrollview 的 ViewController,我在 uiscrollview 内创建了 2 个 uiview 作为页面,并启用了分页和滚动:

_scrollView.frame = CGRectMake(_scrollView.frame.origin.x, _scrollView.frame.origin.y, _scrollView.frame.size.width, _scrollView.frame.size.height);

_scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width, _scrollView.frame.size.height*PAGES_NUMBER);
_scrollView.delegate = self;
[self.view addSubview:_scrollView];

//PAGE 1
    genderViewController = [[GenderViewController alloc]init];
genderViewController.view.frame = CGRectMake(0.0,
                                             _scrollView.frame.size.height*0,
                                             _scrollView.frame.size.width,
                                             _scrollView.frame.size.height);

[_scrollView addSubview:genderViewController.view];

//PAGE 2
    ageViewController = [[AgeViewController alloc]init];
ageViewController.view.frame =CGRectMake(0.0,
                                         _scrollView.frame.size.height*1,
                                         _scrollView.frame.size.width,
                                         _scrollView.frame.size.height);

[_scrollView addSubview:ageViewController.view];

问题是我想知道如何在这 2 个 uiview 之间传递数据。 例如,我在第一页“genderViewController”中有一个 UITextField,一旦滚动到第二页,我想在第二页“ageViewController”中显示此内容和 UILabel。 我知道如何在导航视图中的 2 个不同的视图控制器之间传递数据,但在这个阶段我不知道如何做到这一点。 如果你们能帮助我,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

它与导航视图中的几乎相同。显然,您的两个视图控制器嵌套在第三个拥有的滚动视图中,比如说主视图控制器。

最简洁的实现方式是,如果带有UITextField (genderViewController) 的视图控制器将调用您为主视图控制器定义的任何委托方法。为此,master 会将自己设置为 genderViewController 的委托(您可能需要添加委托协议和设置器)。

如果你想在书中实现它,那么在genderViewController 符合的协议中声明回调/委托方法。

调用此方法后,您的主视图控制器将调用ageViewController 的设置器。在这个 setter 中,ageViewController 将设置 UILable 的值

【讨论】:

感谢您的回复。但我认为它不会工作,因为 2 个视图控制器是一直创建的。我的意思是,当应用程序运行时,会创建 2 个视图控制器。之后,我想在第一页中键入任何文本,并且我希望在第二页标签中更新该文本,但由于第二页已经创建,它不会显示文本。我说的对吗? 不,你说的不对。它会起作用的。试试看。但是,ageViewController 的文本设置器当然必须更新 UILable 的实际文本。检查标签是否为零,只是为了保存。【参考方案2】:

委托方法可能适用于某些特定操作。但我会发现它 - 从概念上讲 - 在这种情况下更适合使用 Key/Value Observing。

可以在以下位置找到文档:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOCompliance.html

对于您的情况,ageViewController 可以观察到 genderViewController 中 keyPath(比如 textField.text)的变化。

【讨论】:

以上是关于在uiscrollview中的多个uiview之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 中的 UIView 不调整宽度

将 UIView 从 xib 添加到 UIScrollView

UITableViewCell的XIB中的多个UIView

使用 UIScrollView 在 UIView layoutSublayersOfLayer 中断言失败

如何在 UIScrollView 中捏缩放多个 UIImageView

根据手机调整UIScrollView中UIView和UIButton之间的约束高度