2016-06-07 3 views
2

У меня есть контроллер просмотра, который собирает информацию, включая возможность добавления нескольких фотографий в запись. По мере добавления каждой фотографии новая фотография появляется в качестве фотографии функций (раскадровка UIImageview внутри VC). Каждая фотография также должна быть добавлена ​​в массив изображений, который затем передается в представление контейнера со своим собственным настраиваемым контроллером представлений и отображается. По мере добавления каждой фотографии отображается фотография функции, но контейнер не перезагружается изображениями.Добавить фотографию и перезагрузить встроенный контроллер просмотра фотоконтента

Фото Контейнер действительно кажется, работает, когда массив существующих фотографий передается на сайт через подготовку к методу SEGUE следующим образом:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if (segue.identifier == "segueToPhotoCollection") 
    { 
     if let imagesArray = images 
     { 
      print("photos prepared") 
      let controller = (segue.destinationViewController as! PhotoCollectionVC) 
      controller.images = imagesArray 
      controller.delegate = self 
     } 
    } 

А если нет фотографий, контейнер еще загружает (и печатные издания «загружен контейнер, но нет фотографий»).

class PhotoCollectionVC: UICollectionViewController 
{ 
var images: [UIImage]? 

weak var delegate: FeatureImageController? 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    if images?.count > 0 
    { print("container loaded with photos: \(images!.count)") } 
    else { print ("container loaded, but no photos") } 

Что мне нужно каким-то образом либо вспомнить метод prepareForSegue или найти другой способ обновить и перезагрузить контейнер один раз добавляется изображение. Сборщика didFinishPickingMediaWithInfo выглядит следующим образом:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
{ 
    picker.dismissViewControllerAnimated(true, completion: 
    { 
     var imageTaken = info[UIImagePickerControllerEditedImage] as? UIImage 
     ... 

     if let imageTakenNotNil = imageTaken 
     { 
      if self.images == nil 
      { self.images = [] } 
      self.images?.append(imageTakenNotNil) 

Строку, которая каким-то образом повторно передать этот массив изображений в контейнер. Нужен ли мне метод делегата?!?

ответ

1

Вы ищете какой-то оттенок? так что вы можете назвать это ваша функция выбора

performSegueWithIdentifier("mySegueID", sender: nil) 

IOS - How to segue programmatically using swift

+0

Я пробовал это, но получаю следующее сообщение об ошибке: «В представлении контейнера есть непредвиденные представления в subview. Возможно, встроенный segue уже был запущен один раз или подпрограмма была добавлена ​​программно?» Определенно, встроенный segue уже запускается один раз - когда родительский контроллер представления сначала загружается, он загружает встроенный сегмент. Мне нужно что-то очень похожее на то, что я могу повторять несколько раз после каждого выбора фотографии. – DrWhat

1

В вашем главном контроллере представления, добавьте переменную, которая будет поддерживать ссылку на ваш встроенный контроллер представления. В prepareForSegue назначьте эту ссылку. Затем в файле didFinishPickingMediaWithInfo вы можете использовать эту ссылку, чтобы внести изменения в свой встроенный контроллер просмотра и обновить его.

Так что под вашим IBOutlets вы будете иметь что-то вроде:

var photoControlView: PhotoCollectionVC? 

Ваш prepareForSegue будет как:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if (segue.identifier == "segueToPhotoCollection") 
    { 
     if let imagesArray = images 
     { 
      print("photos prepared") 
      let controller = (segue.destinationViewController as! PhotoCollectionVC) 
      controller.images = imagesArray 
      controller.delegate = self 
      self.photoControlView = controller 
     } 
    } 

И didFinishPickingMediaWithInfo теперь вы можете сделать:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
{ 
    picker.dismissViewControllerAnimated(true, completion: 
    { 
     var imageTaken = info[UIImagePickerControllerEditedImage] as? UIImage 
     ... 

     if let imageTakenNotNil = imageTaken 
     { 
      if self.images == nil 
      { self.images = [] } 
      self.images?.append(imageTakenNotNil) 
      self.photoControlView!.images = self.images 
      self.photoControlView!.reloadData() 
      self.photoControlView!.setNeedsDisplay() 

Я не уверен, что вызов setNeedsDisplay() необходим или даже исправлен, чтобы обновить но я использовал остальную часть этого метода раньше и знаю, что он работает.

Смежные вопросы