从嵌入在 UIContainerView 中的视图调用父视图的方法。迅速
Posted
技术标签:
【中文标题】从嵌入在 UIContainerView 中的视图调用父视图的方法。迅速【英文标题】:call a method of a parent view from a view embedded in a UIContainerView. swift 【发布时间】:2016-07-11 07:22:44 【问题描述】:我会尽力解释这一点。 我有一个 UIViewController。里面有一个“跳过”按钮,还有一个 UIContainerView。嵌入在该容器视图中的是 UIPageViewController。页面视图控制器有 4 个页面。
我希望能够使“跳过”按钮(在父 UIViewController 中)为 PageViewController 中的每个页面具有不同的颜色。 示例:如果页面 == 1,则 SKIP.color = 白色。如果页面 == 2,则 SKIP.color = 蓝色...
我不明白从子 PageViewController 调用父级内部方法的正确方法。
任何帮助将不胜感激
【问题讨论】:
在 ios/NSNotificationCentre 中查看代表 【参考方案1】:您可以使用委托模式或 NSNotification。
代表团
将 parentVC 设置为 pageVC 的委托,并记住 parentVC 必须符合页面视图控制器的委托协议
class ParentClass: UIViewController, UIPageViewControllerDelegate
// ...
pageInstanceVC.delegate = self
然后实现它的委托方法(这是你改变按钮颜色的地方),你可能想在
- pageViewController:willTransitionToViewControllers:
或 - pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:
完整的文档可以在 here 找到
通知
设置parentVC监听页面变化通知,并在收到通知时实现需要的方法
// Parent VC
override func viewDidLoad()
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeButtonColor", name: "kPageChangeNotif", object: nil)
func changeButtonColor(notification: NSNotification)
let userInfo = notification.userInfo as Dictionary
let pageNumber = userInfo["PageNumber"]
// Change the button color
// .....
然后在页面更改时发出通知
// PageVC
NSNotificationCenter.defaultCenter().postNotificationName("kPageChangeNotif", object: nil, userInfo: ["PageNumber" : 2])
记得在适当的时候从观察 NSNotificationCenter 的 (removeObserver
) 中删除 parentVC
【讨论】:
【参考方案2】:您可以使用发布通知来完成此操作,
当用户改变页面时你会触发它。
【讨论】:
以上是关于从嵌入在 UIContainerView 中的视图调用父视图的方法。迅速的主要内容,如果未能解决你的问题,请参考以下文章
带有嵌入式 UITableViewController 的 UIContainerView 在 Xcode 5 (SDK 7) 上有灰色背景
UIContainerView 中的 ChildViewController 在初始加载时高度错误
UINavigationViewController 控件 UIContainerView 嵌入 segue
如何将数据传递给嵌套控制器(UIContainerView)?