Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何通过脚本中的视图以编程方式创建UIViewController_Ios_Swift_Uiviewcontroller - Fatal编程技术网

Ios 如何通过脚本中的视图以编程方式创建UIViewController

Ios 如何通过脚本中的视图以编程方式创建UIViewController,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我在Main.storyboard中设计了一个名为ProfileViewController的视图控制器,还有一个同名的类。 我可以像这样实例化viewController UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as? ProfileViewController 然而,我想做的是像这样实例化视图控制器 let pro

我在
Main.storyboard
中设计了一个名为
ProfileViewController
的视图控制器,还有一个同名的类。 我可以像这样实例化viewController

UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as? ProfileViewController
然而,我想做的是像这样实例化视图控制器

let profileViewController = ProfileViewController(/*argument list*/)

情节提要的视图控制器必须从情节提要实例化。如果需要自定义构造函数(如初始值设定项),可以定义如下所示的简单构造函数:

extension ProfileViewController {
    static func new(argument: any) -> ProfileViewController {
        let vc = UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
        vc.argument = argument
        return vc
    }
}
请注意,如果要使用真正的初始值设定项,则不能使用情节提要。您可以使用所设计视图控制器的视图,并将其指定给初始值设定项中的视图,但会丢失其他视图控制器设置

extension ProfileViewController {
    convenience init(argument: Any) {
        self.init()
        self.view = UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController").view
        self.argument = argument
    }
}

情节提要的视图控制器必须从情节提要实例化。如果需要自定义构造函数(如初始值设定项),可以定义如下所示的简单构造函数:

extension ProfileViewController {
    static func new(argument: any) -> ProfileViewController {
        let vc = UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
        vc.argument = argument
        return vc
    }
}
请注意,如果要使用真正的初始值设定项,则不能使用情节提要。您可以使用所设计视图控制器的视图,并将其指定给初始值设定项中的视图,但会丢失其他视图控制器设置

extension ProfileViewController {
    convenience init(argument: Any) {
        self.init()
        self.view = UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController").view
        self.argument = argument
    }
}

您是否希望从另一个viewcontroller显示您使用的
self.present()
如果不是这样,则不清楚您希望用该代码实现什么如果您希望在情节提要中设计的元素显示出来,则必须从情节提要中实例化它。如果您只在代码中设计了
ProfileViewController
,则可以使用
let ProfileViewController=ProfileViewController(/*参数列表*/)
来实例化它。是否要从另一个viewcontroller显示您使用的
self.present()
如果不是这样,则不清楚您希望通过该代码实现什么如果您希望在故事板中设计的元素显示出来,则必须从故事板中实例化它。如果您仅在代码中设计了
ProfileViewController
,则可以使用
let ProfileViewController=ProfileViewController(/*参数列表*/)
对其进行实例化,谢谢您的回答。我遵循了您的指示,但我收到了以下异常:“由于未捕获的异常‘UIViewControllerHierarchyInconsistency’而终止应用程序,原因是:‘一个视图一次最多只能与一个视图控制器关联!’我不明白我做错了什么。您好,谢谢您的回答。我按照你的指示做了,但我收到了这个异常“由于未捕获的异常‘UIViewControllerHierarchyInconsistency’而终止应用程序”,原因是:‘一个视图一次最多只能与一个视图控制器关联!’我不明白我做错了什么。