如何从 UIView 调用 presentViewController?
How call presentViewController from UIView?
我有 2 个 UIView 和 2 个 UIviewController,如下所示:
//define my view class
class myV1 : UIView {
v1Ctrl : V1ViewController!
//init view
init() {
super.init(frame: UIScreen.MainScreen().bouns)
//create button in order to transfer to other viewcontroller
var btn : UIButton = UIButton()
btn.addTarget(self, action : "btnFunc:", forControlEvents : UIControlEvents.TouchUpInside)
// and add more like settitle and setTitleColor and etc, Finally add to view
view.addSubView(btn)
}
init(coder aDecoder :NsCoder) {
super.init(coder : ADecoder)
}
}
func btnFunc(sender : UIButton!) {
v1Ctrl = V1ViewController()
v1Ctrl.presentViewController(SecondViewController(), animated : true, completion : nil)
}
其他视图同myV1
我的 V1ViewController 如下所示:
class V1ViewController : UIViewController {
var V1 : Myv1!
override func viewDidLoad() {
V1 = Myv1()
self.view.addSubView(V1)
}
}
我的应用程序在没有 Storyboard 和 Segue 的情况下工作以在 viewController 之间转换。
那个问题是,在我 运行 应用程序并点击 btn 后出现错误:
其视图不在 window 层次结构中!
有什么想法吗?
您正在此处实例化一个新的 UIViewController
func myV1(sender : UIButton!) {
v1Ctrl = V1ViewController()
v1Ctrl.presentViewController(SecondViewController(), animated : true, completion : nil)
}
现在应该呈现一个新的 UIViewController 的 v1Ctrl
之前没有添加到 Window 层次结构中。
通常,您应该考虑您的架构,因为 UIView 不应该负责创建新的 UIViewController 并呈现它。
解决您问题的最快方法应该是在 class V1ViewController
的 viewDidLoad
中分配 v1Ctrl
var 并删除行 v1Ctrl = V1ViewController()
class V1ViewController : UIViewController {
var V1 : Myv1!
override func viewDidLoad() {
V1 = Myv1()
V1.v1Ctrl = self
self.view.addSubView(V1)
}
}
.
func myV1(sender : UIButton!) {
v1Ctrl.presentViewController(SecondViewController(), animated : true, completion : nil)
}
我有 2 个 UIView 和 2 个 UIviewController,如下所示:
//define my view class
class myV1 : UIView {
v1Ctrl : V1ViewController!
//init view
init() {
super.init(frame: UIScreen.MainScreen().bouns)
//create button in order to transfer to other viewcontroller
var btn : UIButton = UIButton()
btn.addTarget(self, action : "btnFunc:", forControlEvents : UIControlEvents.TouchUpInside)
// and add more like settitle and setTitleColor and etc, Finally add to view
view.addSubView(btn)
}
init(coder aDecoder :NsCoder) {
super.init(coder : ADecoder)
}
}
func btnFunc(sender : UIButton!) {
v1Ctrl = V1ViewController()
v1Ctrl.presentViewController(SecondViewController(), animated : true, completion : nil)
}
其他视图同myV1
我的 V1ViewController 如下所示:
class V1ViewController : UIViewController {
var V1 : Myv1!
override func viewDidLoad() {
V1 = Myv1()
self.view.addSubView(V1)
}
}
我的应用程序在没有 Storyboard 和 Segue 的情况下工作以在 viewController 之间转换。
那个问题是,在我 运行 应用程序并点击 btn 后出现错误: 其视图不在 window 层次结构中!
有什么想法吗?
您正在此处实例化一个新的 UIViewController
func myV1(sender : UIButton!) {
v1Ctrl = V1ViewController()
v1Ctrl.presentViewController(SecondViewController(), animated : true, completion : nil)
}
现在应该呈现一个新的 UIViewController 的 v1Ctrl
之前没有添加到 Window 层次结构中。
通常,您应该考虑您的架构,因为 UIView 不应该负责创建新的 UIViewController 并呈现它。
解决您问题的最快方法应该是在 class V1ViewController
的 viewDidLoad
中分配 v1Ctrl
var 并删除行 v1Ctrl = V1ViewController()
class V1ViewController : UIViewController {
var V1 : Myv1!
override func viewDidLoad() {
V1 = Myv1()
V1.v1Ctrl = self
self.view.addSubView(V1)
}
}
.
func myV1(sender : UIButton!) {
v1Ctrl.presentViewController(SecondViewController(), animated : true, completion : nil)
}