我有一个屏幕,如screen1vc
和screen2vc
。现在我有一个名为commonvc
的视图控制器。
我怀疑是。在screen1vc
和screen2vc
中,我将允许用户查看commonvc
屏幕。但是在viewdidload
或viewdidapper
中,我需要检查哪个viewcontroller用户即将到来。
喜欢
if (screen1vc)
{
} else if (screen2vc){
}
我该怎么办请帮助我。我正在努力推动commonvc
self.navigationController?.pushViewController(commonvc, animated: true)
由于
答案 0 :(得分:0)
您可以在公共VC中拥有父控制器属性。将它设置在screen1vc和screen2vc中的prepareFor segue方法中,并使用self。
现在,在commmonVC中,只需检查
if ([parentController iskindOfClass: screen1vc])
{
}else if ([parentController iskindOfClass: screen2vc]){
}
这应该有用。
答案 1 :(得分:0)
NSUInteger numberOfViewControllersOnStack = [self.navigationController.viewControllers count];
UIViewController *parentViewController = self.navigationController.viewControllers[numberOfViewControllersOnStack - 2];
if ([parentViewController isKindOfClass: screen1vc]){
}else if ([parentViewController isKindOfClass: screen2vc]){
}
答案 2 :(得分:0)
在swift中,如果你在导航控制器堆栈中那么
navigationcontroller.viewControllers[navigationcontroller.viewControllers.count - 2]
将为您提供所需的UIViewController对象。
如果您正在展示视图控制器,那么self.presenting
将为您完成工作。
希望这有帮助!
答案 3 :(得分:0)
你可以通过两种方式做到
1.通过如下所示从navigationController viewControllers数组获取前一个。
if let navController = self.navigationController, navController.viewControllers.count >= 2 {
let viewController = navController.viewControllers[navController.viewControllers.count - 2]
}
2.另一种方法是在commonVC&中创建字符串变量在推送到viewController时填充所需的值。您可以执行类似下面的操作
在commonVC中创建变量
var isFrom:String = ""
在推送使用commonVc对象之前分配值。
commonvc.isFrom = "screen1VC"
self.navigationController?.pushViewController(commonvc, animated: true)
现在处于commonVC
if (self.isFrom == "screen1VC")
{
} else if (self.isFrom == "screen2VC"){
}
答案 4 :(得分:0)
您可以创建一个UIView扩展并在整个应用程序中使用它。
extension UIView{
var parentViewController: UIViewController?{
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if parentResponder is UIViewController{
return parentResponder as! UIViewController!
}
}
return nil
}
}
并像这样使用
if parentViewController?.isKind(of: screen1vc){
}