2017-02-10 2 views
0

Я пытаюсь создать функцию делегата, чтобы перезагрузить представление коллекции в другом контроллере представления в событии.Получить правильный экземпляр ViewController для использования с функцией делегата

С этой целью я определил протокол, задал делегат в классе и простую функцию делегата.

protocol ReloadCollectionDelegate: class { 
    func reloadCollectionViewFromDelegate() 
} 


class JourneyViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UITabBarControllerDelegate, UIScrollViewDelegate, ReloadCollectionDelegate { 

    // delegate function from downloadCollectionController to relaod collection 
    func reloadCollectionViewFromDelegate() { 
     // simply call the reload function 
     reloadCollection() 
    } 

И в моем классе, который будет вызывать вышеуказанную функцию:

// define the delegate for use 
weak var reloadJourneyDelegate: ReloadCollectionDelegate? 

// reload the collection view in JourneyViewController 
let JVC = self.viewController.storyboard!.instantiateViewController(withIdentifier: "JourneyViewController") as! JourneyViewController 
self.reloadJourneyDelegate = JVC 
self.reloadJourneyDelegate?.reloadCollectionViewFromDelegate() 

печати (JVC):

JourneyViewController: 0x7fc7f7c55bf0 

печати (само) - от JourneyViewController (viewDidLoad):

JourneyViewController: 0x7fc7f7e2db10 

Так что я получаю разные экземпляры одного и того же контроллера.

Как определить это, чтобы у меня был правильный экземпляр и вы можете изменить пользовательский интерфейс?

Благодаря

+0

Где вы звоните в viewDidLoad? –

+0

печать self in viewDidload() в классе JourneyViewController – Pippo

ответ

1

Эта строка создает новый экземпляр JourneyViewController

self.viewController.storyboard!.instantiateViewController(withIdentifier: "JourneyViewController") as! JourneyViewController 

Вы должны иметь способ сослаться на оригинальный экземпляр JourneyViewController. Либо имея свойство, которое указывает на него, или если оба просматривать контроллеры в иерархии таким образом, что JourneyViewController является родителем другого контроллера представления:

class ViewControllerA: UIViewController { 
    override viewDidLoad() { 
     let button = UIButton(frame: CGRect(x: self.view.bounds.width/2, y: 400, width: 50, height: 50)) 
     button.backgroundColor = UIColor.black 
     button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside) 
     self.view.addSubview(button) 
    } 

    func buttonPressed() { 
     let journey = self.parent as! JourneyViewController 
     journey.reloadCollection() 
    } 
} 
Смежные вопросы