サイドバーメニューの選択した行に基づいてUIWebViewにURLをロードしようとしています。私はSWRevealViewControllerを使っています。私は、AlamofireとSwiftyJSONを使ってJSONでメニューを読み込んでいます。それは3行と各行のURLを持っています。メニューのための私のコードは次のようになります。サイドバーメニューからUIWebViewで間違った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
}
そして、私はこのようなこのビューコントローラからセグエ:
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が空白になります。 2番目の行を選択すると、最初のURL、3番目のURL、2番目のURLなどが表示されます。 MenuTableViewControllerのdidSelectRowAtIndexPathのprint(valueToPass)が各セルの右のURLを表示しますが、選択する行に基づいていません。
私はそれを試しましたが、それはまだ同じです。しかし、私が気づいたのは、行を一度選択してから同じ行を2回選択すると、UIWebViewで正しいコンテンツが得られるということです –