在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之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章
将 UIView 从 xib 添加到 UIScrollView
使用 UIScrollView 在 UIView layoutSublayersOfLayer 中断言失败