无法呈现在 UITableViewCell 中
Unable to present in a UITableViewCell
以下代码在 UIViewController
中有效,但在我的 class 中 UITableViewCell
它给出了错误
Use of unresolved identifier 'present'.
代码是一个动作:
@IBAction func linkAction(_ sender: Any) {
let linkString = self.linkText.text
if let requestUrl = URL(string: linkString!) {
let safariVC = SFSafariViewController(url: requestUrl)
present(safariVC, animated: true)
}
}
有解决办法吗?
您需要与显示此 TableView 的 ViewController 进行通信。使用远程通知或委托。
在主 UIViewController 中:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "idCell", for: indexPath)
cell.viewController = self
}
在 UITableViewCell 中 class:
class TableViewCell: UITableViewCell {
weak var viewController: UIViewController?
@IBAction func linkAction(_ sender: Any) {
let linkString = self.linkText.text
if let requestUrl = URL(string: linkString!) {
let safariVC = SFSafariViewController(url: requestUrl)
viewController?.present(safariVC, animated: true, completion: nil)
}
}
}
以下代码在 UIViewController
中有效,但在我的 class 中 UITableViewCell
它给出了错误
Use of unresolved identifier 'present'.
代码是一个动作:
@IBAction func linkAction(_ sender: Any) {
let linkString = self.linkText.text
if let requestUrl = URL(string: linkString!) {
let safariVC = SFSafariViewController(url: requestUrl)
present(safariVC, animated: true)
}
}
有解决办法吗?
您需要与显示此 TableView 的 ViewController 进行通信。使用远程通知或委托。
在主 UIViewController 中:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "idCell", for: indexPath)
cell.viewController = self
}
在 UITableViewCell 中 class:
class TableViewCell: UITableViewCell {
weak var viewController: UIViewController?
@IBAction func linkAction(_ sender: Any) {
let linkString = self.linkText.text
if let requestUrl = URL(string: linkString!) {
let safariVC = SFSafariViewController(url: requestUrl)
viewController?.present(safariVC, animated: true, completion: nil)
}
}
}