2016-10-14 1 views
0

У меня есть несколько контроллеров представлений (контроллеры вида «From»), подключенные к одному контроллеру вида ItemCollectionVC.
Когда представлен ItemCollectionVC, я хочу знать, какой контроллер представления представил его.

Как это сделать?Как узнать, какой контроллер представлений представлен контроллером вида

'С' контроллерах зрения:

@IBAction func selectOpponentItems(_ sender: UIButton) { 

    let VC = storyboard?.instantiateViewController(withIdentifier: "ItemCollectionVC") as! ItemCollectionVC 
    VC.preferredContentSize = CGSize(width: UIScreen.main.bounds.width/2, height: UIScreen.main.bounds.height/1.5) 
    VC.modalPresentationStyle = UIModalPresentationStyle.popover 
    VC.popoverPresentationController?.sourceView = sender 
    VC.popoverPresentationController?.sourceRect = sender.bounds 

    self.present(VC, animated: true, completion: nil) 
} 

ItemViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 
} 

Edit:

Я пытаюсь получить доступ к свойству так:

switch self.presentingViewController!.title! { 
// Error 
    case "CounterBuildVC": 
     dataSourceItems = counterBuildItems 
    case "FreeBuildVC": 
     dataSourceItems = freeBuildItems 
    case "KrakenViewController": 
     dataSourceItems = captureKrakenItems 
    default: 
     break 
    } 

However, it crashes with error: unexpectedly found nil, I'm sure I set the title in storyboard

+0

Вы можете достичь этого 'методом self.presentingViewController'. –

+0

Возможный дубликат [Access parental controller controller parent] (http://stackoverflow.com/questions/6735170/access-modal-view-controller-parent) – Larme

ответ

1

presentingViewController свойство UIViewController это то, что вы ищете

+0

Это свойство, казалось, было нулевым, когда я его запускал –

+0

См. Обновление –

+0

Кажется, что до тех пор, пока vc не будет представлен это свойство, вы не можете использовать это свойство в viewWillAppear/viewDidAppear –

0

Вы можете получить контроллер представления с помощью self.presentingViewController

1

так, как я бы идти о чем-то, как это просто создать делегат в заголовке ItemCollectionVC:

@property (nonatomic, assign) id delegate; 

набор:

VC.delegate = self; 

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

Приветствия!

Обратите внимание:

self.presentingViewController; //This would be nil in viewDidLoad, so yeah not completely useful here 
+0

Это похоже на действительно классный метод, но, честно говоря, я не понимаю –

0

Если вы представили ViewControllerB от ViewControllerA. то в ViewControllerB вы можете проверить представленную ViewController в follwing код

if([self.presentingViewController isKindOfClass:[ViewControllerA class]]){ 
       /*Write your Code here*/ 
} 
Смежные вопросы