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

时间:2016-07-11 07:22:44

标签: ios swift uinavigationcontroller uipageviewcontroller

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

我希望能够使'SKIP'按钮(在父UIViewController中)为PageViewController中的每个页面设置不同的颜色。 示例:if page == 1,SKIP.color = white。 if page == 2,SKIP.color = blue ...

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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分: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])

请记住在适当时删除parentVC以观察NSNotificationCenter(removeObserver

答案 1 :(得分:0)

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

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