Quand je tape un tableViewCell
je veux un lien (qui est spécifique à indexPath.row
cette cellule) pour s'ouvrir dans un nouveau viewController avec un webView.
Exemple: Je tape la 3ème cellule dans le tableView
et www.apple.com s'ouvre sur un nouveau viewController.
didSelectRowAtIndexPath
faire cela avec didSelectRowAtIndexPath
mais je n'arrive pas à comprendre comment mettre le code set de sorte que le code du linksArray
(où j'ai tous les liens stockés) fonctionne set quand je tape le tableViewCell
J'interroge ces liens depuis Parse.com. C'est mon tableau:
var linksArray = [NSURL](
)
J'ai créé une nouvelle class appelée LinkViewViewController
où j'ai juste la webView connectée comme @IBOutlet weak var webView: UIWebView!
et rien d'autre. J'ai retiré la méthode viewDidLoad
afin que je puisse contrôler le LinkViewViewController
de la class FeedTableViewController
qui a les cellules.
Voici mon code ci-dessous
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let myWebView = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! LinkViewViewController var url = NSURL(ssortingng:"\(links[indexPath.row])") var request = NSURLRequest(URL: url!) myWebView.webView.loadRequest(links[indexPath.row] as! NSURLRequest) }
METTRE À JOUR
J'essaie aussi de le faire de cette façon, ce qui est peut-être plus logique. J'accède aux liens stockés dans Parse dans la class ProductInfo. Le tableau productName
représente l'ordre dans lequel les cellules sont organisées afin que les liens soient accessibles lorsque vous tapez sur le nom du produit.
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let myWebView = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! LinkViewViewController //Assuming that myWebView is the right method/way to go about it. var link = PFObject(className: "ProductInfo") link["pLink"] = productName[indexPath.row] /* Code missing: I'm accessing where the link is (the indexPath.row) associated with the productName. I don't know how to go about this now... How do i access the webView in the other viewController where the corresponding link appears? */ }
J'ai aussi essayé de créer une segue depuis la cellule vers le webView mais cela n'a pas fonctionné non plus …
Comment puis-je configurer le didSelectRowAtIndexPath
afin qu'un lien soit déclenché pour apparaître dans une nouvelle vue?
Pensée: NSTransportSecurity
dans le info.plist
aussi un problème?
Toute aide signifie beaucoup.
Merci.
Vous ne devriez pas utiliser dequeueReusableCellWithIdentifier
pour créer votre prochain controller de vue. Vous devez utiliser l'instantiateViewControllerWithIdentifier du storyboard pour créer l'instance: Définissez le "Storyboard ID" pour viewController dans votre storyboard
Si vous le définissez, par exemple, "WebViewController", vous pouvez ensuite créer l'instance avec:
let myWebView = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as! LinkViewViewController
Ma recommandation serait de donner à LinkViewViewController
sa propre propriété d'URL,
var url : NSURL?
et pour passer l'URL après avoir créé l'instance:
myWebView.url = url
puis présentez le nouveau VC:
self.presentViewController(myWebView, animated: true, completion: nil)
Dans viewDidLoad
de LinkViewViewController, chargez l'URL dans le WebView:
let URLRequest = NSURLRequest(self.url) self.webView.loadRequest(URLRequest)
(Dactylographié sans essai, s'il vous plaît pardonner toutes les fautes de frappe / erreurs avec optionals etc).
Pour didSelectRow
, cette méthode utilise la méthode didSelectRow
pour créer l'instance de controller de vue et transmettre l'URL. Une autre option serait d'utiliser un segue en faisant glisser ctrl de la cellule prototype vers le controller de vue. Vous devez ensuite implémenter un code similaire dans la méthode prepareForSegue
pour définir l'URL.