从嵌入在 UIContainerView 中的视图调用父视图的方法。 swift

call a method of a parent view from a view embedded in a UIContainerView. swift

我会尽力解释这一点。 我有一个 UIViewController。它里面有一个 'SKIP' 按钮,还有一个 UIContainerView。嵌入在该容器视图中的是一个 UIPageViewController。页面视图控制器有 4 个页面。

我希望能够使 'SKIP' 按钮(在父 UIViewController 中)在 PageViewController 中的每个页面具有不同的颜色。 示例:如果页面 == 1,SKIP.color = 白色。如果页面 == 2,SKIP.color = 蓝色...

我不明白从子 PageViewController 调用父内部方法的正确方法。

任何帮助将不胜感激

您可以使用 Post 通知来完成此操作,

当用户更改页面时,您将触发它。

您可以使用委托模式或 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