Swift:触发 TableViewCell 导致另一个 ViewController 中的 UIWebView 中的 link
Swift: Triggering TableViewCell to lead to a link in a UIWebView in another ViewController
当我点击 tableViewCell
时,我希望 link(特定于该单元格的 indexPath.row
)在带有 webView 的新 viewController 中打开。
示例:我点击 tableView
中的第 3 个单元格,然后 www.apple.com 打开一个新的 viewController。
我正在尝试使用 didSelectRowAtIndexPath
来做到这一点,但我无法弄清楚如何将代码放在一起,以便来自 linksArray
的代码(我拥有所有 links stored) 当我点击 tableViewCell
时一起工作
我正在查询来自 Parse.com 的这些 link。这是我的数组:
var linksArray = [NSURL](
)
我创建了一个名为 LinkViewViewController
的新 Class,其中我仅将 webView 作为 @IBOutlet weak var webView: UIWebView!
连接,没有其他任何内容。我取出了viewDidLoad
方法,这样我就可以从FeedTableViewController
class有单元格的地方控制LinkViewViewController
了。
下面是我的代码
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let myWebView = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! LinkViewViewController
var url = NSURL(string:"\(links[indexPath.row])")
var request = NSURLRequest(URL: url!)
myWebView.webView.loadRequest(links[indexPath.row] as! NSURLRequest)
}
更新
我也在尝试这样做,这样可能更合乎逻辑。我正在访问存储在 ProductInfo class 中的 Parse 中的 links。 productName
数组表示单元格的组织顺序,以便在点击产品名称时可以访问 link。
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?
*/
}
我也尝试过创建一个从单元格到 webView 的 segue,但这也没有用...
如何设置 didSelectRowAtIndexPath
以便触发 link 以显示在新视图中?
思想:NSTransportSecurity
中的info.plist
也有问题?
任何帮助都意义重大。
谢谢。
您不应该使用 dequeueReusableCellWithIdentifier
来创建您的下一个视图控制器。您应该使用故事板的 instantiateViewControllerWithIdentifier
创建实例:在故事板
中为 viewController 设置 "Storyboard ID"
例如,如果将其设置为 "WebViewController",则可以使用以下命令创建实例:
let myWebView = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as! LinkViewViewController
我的建议是给 LinkViewViewController
一个单独的 URL 属性,
var url : NSURL?
并在创建实例后传递 URL:
myWebView.url = url
然后呈现新的VC:
self.presentViewController(myWebView, animated: true, completion: nil)
在LinkViewViewController的viewDidLoad
中,将URL加载到webView中:
let URLRequest = NSURLRequest(self.url)
self.webView.loadRequest(URLRequest)
(未经测试输入;请原谅任何 typos/errors 与可选等)。
作为最后的说明,此方法使用 didSelectRow
方法创建视图控制器实例并传递 URL。另一种选择是通过按住 ctrl 键从原型单元格拖动到视图控制器来使用 segue。然后你需要在 prepareForSegue
方法中实现类似的代码来设置 url.
当我点击 tableViewCell
时,我希望 link(特定于该单元格的 indexPath.row
)在带有 webView 的新 viewController 中打开。
示例:我点击 tableView
中的第 3 个单元格,然后 www.apple.com 打开一个新的 viewController。
我正在尝试使用 didSelectRowAtIndexPath
来做到这一点,但我无法弄清楚如何将代码放在一起,以便来自 linksArray
的代码(我拥有所有 links stored) 当我点击 tableViewCell
我正在查询来自 Parse.com 的这些 link。这是我的数组:
var linksArray = [NSURL](
)
我创建了一个名为 LinkViewViewController
的新 Class,其中我仅将 webView 作为 @IBOutlet weak var webView: UIWebView!
连接,没有其他任何内容。我取出了viewDidLoad
方法,这样我就可以从FeedTableViewController
class有单元格的地方控制LinkViewViewController
了。
下面是我的代码
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let myWebView = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! LinkViewViewController
var url = NSURL(string:"\(links[indexPath.row])")
var request = NSURLRequest(URL: url!)
myWebView.webView.loadRequest(links[indexPath.row] as! NSURLRequest)
}
更新
我也在尝试这样做,这样可能更合乎逻辑。我正在访问存储在 ProductInfo class 中的 Parse 中的 links。 productName
数组表示单元格的组织顺序,以便在点击产品名称时可以访问 link。
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?
*/
}
我也尝试过创建一个从单元格到 webView 的 segue,但这也没有用...
如何设置 didSelectRowAtIndexPath
以便触发 link 以显示在新视图中?
思想:NSTransportSecurity
中的info.plist
也有问题?
任何帮助都意义重大。
谢谢。
您不应该使用 dequeueReusableCellWithIdentifier
来创建您的下一个视图控制器。您应该使用故事板的 instantiateViewControllerWithIdentifier
创建实例:在故事板
例如,如果将其设置为 "WebViewController",则可以使用以下命令创建实例:
let myWebView = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as! LinkViewViewController
我的建议是给 LinkViewViewController
一个单独的 URL 属性,
var url : NSURL?
并在创建实例后传递 URL:
myWebView.url = url
然后呈现新的VC:
self.presentViewController(myWebView, animated: true, completion: nil)
在LinkViewViewController的viewDidLoad
中,将URL加载到webView中:
let URLRequest = NSURLRequest(self.url)
self.webView.loadRequest(URLRequest)
(未经测试输入;请原谅任何 typos/errors 与可选等)。
作为最后的说明,此方法使用 didSelectRow
方法创建视图控制器实例并传递 URL。另一种选择是通过按住 ctrl 键从原型单元格拖动到视图控制器来使用 segue。然后你需要在 prepareForSegue
方法中实现类似的代码来设置 url.