2016-10-14 27 views
0

我有几个视图控制器('从'视图控制器)连接到一个视图控制器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) 
} 

编辑:

我试图访问属性是这样的:

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模式视图控制器父]可能的重复(http://stackoverflow.com/questions/6735170/access-modal-view-controller-parent) – Larme

回答

1

presentingViewControllerUIViewController属性是你要找的

+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

如果从ViewControllerA呈现ViewControllerB。那么在ViewControllerB中你可以通过下面的代码检查呈现的ViewController

if([self.presentingViewController isKindOfClass:[ViewControllerA class]]){ 
       /*Write your Code here*/ 
}