2016-05-10 3 views
0

Я новичок в SWIFT, и я делаю несколько примеров приложений.Показать изображение на UISplitViewController

Единственное, с чем я не могу работать, - это получить изображение, отображаемое в деталях (DetailViewController).

На моем файле MasterViewController я это, чтобы получить мой multiData файл:

... 

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! 
     } 
    } 
} 

Итак, мой вопрос, как я могу получить изображение с detail["image"]?

ответ

1

Я предполагаю, что изображение, содержащееся в detail["image"], находится в вашем приложении Bundle (т. Е .: изображение с HTTP URL). Итак, вы должны использовать init(named:) constructor from UIImage для загрузки изображения. Нечто подобное:

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

Edit:

Здесь, также, ваш код с более эффективного управления дополнительными опциями и бросает в 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 
      } 
     } 
    } 
} 
Смежные вопросы