2016-07-03 21 views
0

Ich habe Ray Wenderlich tutorial über das Erstellen einer iOS-Buchanimation verfolgt, jetzt versuche ich, einige Änderungen daran vorzunehmen.Ich kann keinen weiteren ViewController durchführen, nachdem ich den aktuellen mit einem klaren Hintergrund gezeigt habe.

Original-Projekt besteht aus Navigation Controller, Books View Controller - einer Reihe von Büchern zeigen, indem Sie auf ein Buch, klicken Sie sie öffnen können - und Book View Controller - offen das ausgewählte Buch zeigt.

Was ich hinzugefügt habe: a View Controller und legen Sie es als anfängliche VC; a UIButton, die einen Show-Übergang zu Navigation Controller durchführen.

Here is my storyboard

Ich mag nach Books View Controller erscheinen View Controller im Hintergrund zeigen, aber anscheinend iOS entfernt die Ansicht-Controller unter ihn aus der Sicht Hierarchie, kann dies zu einem schwarzen Hintergrund führen, wenn ich clearColor im Attribute-Inspektoren festgelegt werden. Ich habe dann den folgenden Code zu ViewController.swift hinzugefügt, um einen transparenten Hintergrund zu haben.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let vc = self.storyboard!.instantiateViewControllerWithIdentifier("BooksViewController") as! BooksViewController 
    vc.view.backgroundColor = UIColor.clearColor() 
    vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext 
    self.presentViewController(vc, animated: true, completion: nil) 
} 

Es funktioniert gut, und ich kann die anfängliche VC im Hintergrund sehen, während die Reihe der Bücher zu sehen, aber ich kann nicht mehr segue ausführt an einem Buch zu Book View Controller durch einen Klick. So scheinbar openBook in BooksViewController nie aufgerufen:

func selectedCell() -> BookCoverCell? { 
    if let indexPath = collectionView?.indexPathForItemAtPoint(CGPointMake(collectionView!.contentOffset.x + collectionView!.bounds.width/2, collectionView!.bounds.height/2)) { 
     if let cell = collectionView?.cellForItemAtIndexPath(indexPath) as? BookCoverCell { 
      return cell 
     } 
    } 
    return nil 
} 

func openBook(book: Book?) { 
    let vc = storyboard?.instantiateViewControllerWithIdentifier("BookViewController") as! BookViewController 
    vc.book = selectedCell()?.book 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.navigationController?.pushViewController(vc, animated: true) 
     return 
    }) 
} 

Ich kann nicht verstehen, wo das Problem ist, ist jede Hilfe wirklich zu schätzen. Bitte sei sanft, ich lerne immer noch Swift und Englisch ist nicht meine Muttersprache.

Antwort

1

Sie verwenden prepareForSegue falsch. Sie möchten keinen View-Controller in prepareForSegue präsentieren. Benutze segue.destinationViewController als! YourViewController, um es stattdessen zu referenzieren

+0

Gut gearbeitet, danke. –