2016-05-10 6 views
0

Ich bin ein Neuling in SWIFT und ich mache einige Beispiele Anwendung.Bild anzeigen auf UISplitViewController

Die einzige Sache, die ich nicht arbeiten kann, ist, mein Bild in der Detail-Szene (DetailViewController) angezeigt zu bekommen.

Auf meiner MasterViewController Datei habe ich diese meine multiData Datei zu erhalten:

... 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "showData" { 

     if let indexPath = self.tableView.indexPathForSelectedRow { 

      let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 

      controller.detailItem = self.multiData[indexPath.section][indexPath.row] 
      controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 
     } 
    } 
} 

// Here I get my multiData 
func createData() { 

    var first: [Dictionary<String,String>] = [] 
    var second: [Dictionary<String,String>] = [] 

    dataSections = ["First Data", "Second Data"] 

    first.append(["name": "someName", "image": "somePngFile", "someData": "someText"])   
    second.append(["name": "someName", "image": "somePngFile", "someData": "someText"]) 

    multiData = [first, second] 
} 

DetailViewController:

... 

@IBOutlet weak var label: UILabel!  
@IBOutlet weak var text: UITextView! 
@IBOutlet weak var image: UIImageView! 

... 

func configureView() {   

    if let detail = self.detailItem { 

     if let labelTitle = label { 

      labelTitle.text = detail["name"] as! String! 
     } 

     if let textData = text { 

      textData.text = detail["someData"] as! String! 
     } 

     // This obvious doesn't work 
     if let imageFile = image { 

      imageFile.image = detail["image"] as! UIImage! 
     } 
    } 
} 

Also, meine Frage ist, wie kann ich das Bild von detail["image"] bekommen?

Antwort

1

Ich nehme an, dass das Bild in detail["image"] in Ihrer Anwendung enthalten ist Bündel (d. H. Kein Bild von einer HTTP URL). Also sollten Sie das init(named:) constructor from UIImage verwenden, um Ihr Bild zu laden. So etwas Ähnliches:

if let myImage = UIImage(named: detail["image"]) { 
    myImageView.image = myImage 
} 

Edit:

Hier ist auch, Ihr Code mit einem besseren Management von optionals und wirft in configureView:

func configureView() { 
    if let detail = self.detailItem { 

     if let labelTitle = detail["name"] as? String { 
      myLabel.text = labelTitle 
     } 

     if let textViewContent = detail["someData"] as? String { 
      myTextView.text = textViewContent 
     } 

     if let myImageName = detail["image"] as? String { 
      if let myImage = UIImage(named: myImageName) { 
       myImageView.image = myImage 
      } 
     } 
    } 
}