gpt4 book ai didi

ios - ViewController 加载两次

转载 作者:行者123 更新时间:2023-12-01 18:42:09 26 4
gpt4 key购买 nike

我正在使用 Objective-C 和 swift 3 的组合。

在我的 mainView( Objective-C )中,我有以下内容

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]];
CourseViewController *courseView = (CourseViewController*)[storyboard instantiateViewControllerWithIdentifier:@"courseView"];
[self.navigationController pushViewController:courseView animated:YES];

在我的 Storyboard中,我的 mainView 将显示一个导航 Controller ,它是 swift 3 View 的 rootView。

在 swift 3 View Controller 中,我有以下内容,并且 loadView 和 viewDidLoad 被调用了两次
override func loadView() {
webView = WKWebView()

//If you want to implement the delegate
webView?.navigationDelegate = self

view = webView
}

override func viewDidLoad() {
super.viewDidLoad()
let temp: CGRect = UIScreen.main.bounds
screenSize = temp
let url = URL(string: kcourseURL)
let req = URLRequest(url: url!)
webView.allowsBackForwardNavigationGestures = true
webView.load(req)
//webView.frame = CGRect(x:0, y:navBarHeight, width:Int(screenSize.width), height:Int(screenSize.height))

webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)

self.setBarButton()


}

关于为什么它被调用两次的任何建议?

此外,我试图关闭此 View 以返回主视图,但如果我在 swift 3 View 上使用导航 Controller ,它不会被调用。我试过以下。我是否需要使用 segue unwind 返回主视图?
        self.dismiss(animated: true, completion: nil)

_ = self.navigationController?.popToRootViewController(animated: true)

最佳答案

如果您在应用程序导航 Controller 中使用,那么如果您使用 ,我需要在此处清除一件事转 对于导航,无需在 的帮助下再次调用相同的 View 。代码 在这里只选择一个过程。导航将取决于您想要的类型,例如推送、显示、模态呈现和弹出框呈现。

之后只需要使用一行返回查看或返回 Root View :-

 self.dismiss(animated: true, completion: nil)


_ = self.navigationController?.popViewController(animated: true)


用于返回 Rootview
_ = self.navigationController?.popToRootViewController(animated: true)

对于导航,一个 Storyboard到另一个 Storyboard:-

objective-C
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
SecondViewController *second = (SecondViewController *)[storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self.navigationController pushViewController:second animated:YES];

swift 3
let storyboard = UIStoryboard(name: "Customer", bundle: nil)
let secondVC = storyboard.instantiateViewController(withIdentifier: "SecondVC") as! SecondVC
self.navigationController!.pushViewController(secondVC, animated: true)

并尝试使用 Segue

首先需要获取storyBoard 引用,然后添加storyBoardname,然后在Referenced Id 中添加您的ViewController 的StoryBoard ID。

add Storyboard reference

并确认您的目的地 Controller 的 Storyboard ID

View Controller's StoryBoard ID

最后是带有数据segue标识符的PerformSegue:-
 let segueIdentifier = "fourthView"

//MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == segueIdentifier {
let controller = segue.destination as! FourthVC
//Passing Values here
controller.promoViewModel = promotionModel[0]
}
}

输出将如下图所示,无需做任何额外的事情:-

OutPut View

关于ios - ViewController 加载两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com