gpt4 book ai didi

ios - 从侧边栏菜单在 UIWebView 中加载错误的 url

转载 作者:行者123 更新时间:2023-11-29 00:51:38 29 4
gpt4 key购买 nike

我正在尝试根据侧边栏菜单中的选定行在 UIWebView 中加载一个 url。对于菜单,我使用的是 SWRevealViewController,我正在使用 Alamofire 和 SwiftyJSON 加载带有 JSON 的菜单。它有 3 行,每行一个 url。我的菜单代码如下所示:

import UIKit
import Alamofire

class MenuTableViewController: UITableViewController {
var valueToPass = String()
var jsonArray = []

override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(.GET, "my-JSON-URL").responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let swiftyJsonVar = JSON(responseData.result.value!)

if let resData = swiftyJsonVar["items"].arrayObject {
self.jsonArray = resData as! [[String:AnyObject]]
}
if self.jsonArray.count > 0 {
self.tableView.reloadData()
}
}
print(self.jsonArray)
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (jsonArray.count)
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("DynamicCell", forIndexPath: indexPath)
let array = jsonArray[indexPath.row]
cell.textLabel?.text = array["name"] as? String
return cell
}

然后我像这样从这个 View Controller 开始:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let indexPath = tableView.indexPathForSelectedRow!.row
var array = jsonArray[indexPath]
let url = array["url"] as? String
valueToPass = url!
print(valueToPass)

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if (segue.identifier == "showDetail") {
let viewController = segue.destinationViewController as! UINavigationController
let targetController = viewController.topViewController as! DetailViewController
targetController.passedValue = valueToPass
}

}

这是我在 DetailViewController 中的代码:

import UIKit

class DetailViewController: UIViewController {

@IBOutlet weak var webView: UIWebView!
@IBOutlet weak var menuButton: UIBarButtonItem!

var passedValue = String()

override func viewDidLoad() {
super.viewDidLoad()
if revealViewController() != nil {
menuButton.target = revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.view.addGestureRecognizer(revealViewController().panGestureRecognizer())
}
let url = NSURL (string: passedValue)
let requestObj = NSURLRequest(URL: url!)
webView.loadRequest(requestObj)
}
}

问题是,当我第一次选择菜单中的任何行时,DetailViewController 将显示为空白。当我第二次选择任何行时,它会给我第一个 url,第三次 - 第二个 url 等等。它不基于我选择的行,尽管 MenuTableViewController 中 didSelectRowAtIndexPath 中的 print(valueToPass) 为每个单元格打印正确的 url。

最佳答案

这是因为 alamofire 是 Asynchronous 并在后台线程中加载,而您的 webView 根本没有加载。因此第一次出现空页等等。我建议您在另一个带有完成处理程序的函数中编写 Request ,并在 viewDidLoad() 中调用它,如下所示:

 func loadURL(url: String, completion: (isDone: Bool) -> ()){
Alamofire.request(.GET, url)...
// code
if self.jsonArray.count > 0 {
self.tableView.reloadData()
}
}
completion(isDone: true)
print(self.jsonArray)
}
}

然后在 viewDidLoad() 中调用它:

override func viewDidLoad() {
super.viewDidLoad()
loadUrl("Your Url here") { success in
if success{
self.tableView.reloadData()
}
else{

}
}

应该可以解决你的问题。尝试! :)

关于ios - 从侧边栏菜单在 UIWebView 中加载错误的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080370/

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