从嵌入在 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)?

UIContainerView 内容高度(内嵌 UITableViewController)

容器视图中的 UIScrollView 的帧大小不正确