2016-07-11 8 views
0

ill versuchen, dies so gut wie möglich zu erklären. Ich habe einen UIViewController. Darin befindet sich ein 'SKIP' Button und dort auch ein UIContainerView. In dieser Containeransicht ist ein UIPageViewController eingebettet. Der Page View Controller hat 4 Seiten.rufen Sie eine Methode einer übergeordneten Ansicht aus einer Ansicht auf, die in einer UIContainerView eingebettet ist. swift

Ich möchte in der Lage sein, die Schaltfläche 'SKIP' (im übergeordneten UIViewController) für jede Seite im PageViewController eine andere Farbe zu haben. Beispiel: wenn page == 1, SKIP.color = weiß. Wenn page == 2, SKIP.color = blue ...

Ich verstehe nicht die richtige Methode, um eine Methode innerhalb der Eltern von der untergeordneten PageViewController aufrufen.

würde jede mögliche Hilfe

+0

Überprüfen Sie Delegaten in iOS/NSNotificationCentre – 7vikram7

Antwort

0

Sie können Delegierungsmuster oder NSNotification verwenden.

Delegation

die parentVC als die Delegierten pageVC Set und denken Sie daran, dass die parentVC auf Seite View-Controller des Delegierten Protokoll

class ParentClass: UIViewController, UIPageViewControllerDelegate { 
    // ... 
    pageInstanceVC.delegate = self 
} 
die entsprechen müssen

und dann seine Delegatmethode implementieren (das ist, wo Sie auf die Schaltfläche ändern Farbe), können Sie es in - pageViewController:willTransitionToViewControllers: oder - pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: komplette Dokumente implementieren here

NOTIFi finden Kation

Set parentVC auf Seite Änderungsbenachrichtigung und implementieren die gewünschte Methode zu hören, wenn die Benachrichtigung

// 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 
    // ..... 
} 

Dann Benachrichtigung versandt empfangen wird, wenn Seite

// PageVC 
NSNotificationCenter.defaultCenter().postNotificationName("kPageChangeNotif", object: nil, userInfo: ["PageNumber" : 2]) 

parentVC entfernen Denken Sie daran geändert wird aus Beobachten von NSNotificationCenter (removeObserver) wenn geeignet

0

geschätzt werden Sie Nachmeldung dies zu erreichen, können

und Sie werden es ausgelöst wird, wenn der Benutzer die Seite ändert.