[英](SWIFT 4) How to calculate sum of the columns indexpath.row in the tableview?
[英]Swift 4.2 - How to call “indexPath.row” from “didSelectRowAtIndexPath” method in a tableView to another class?
我有两个viewControllers。 一个有一个tableView,其中有一个数组中的一些单元格。 另一个是viewController,其中包含一个Webkit,我想展示一些本地HTML文件。 另外,我将webKit页面定义为tableView的下一页。 我想要的是,当用户在tableView中选择一个单元格时,根据选择的单元格,它会转到webkit页面,并且运行部分代码以供用户显示特定的HTML。 换句话说,我在tableViewCells中有5个HTML文件和5个项目,因此,如果用户选择第一个项目,则HTML1向他显示,如果他选择第二个单元格,则向他显示HTML2等。
我尝试了很多方法。 但是什么也没发生。 还尝试从tableview类创建实例对象...在这里也尝试了一些相同的问题ins StackOverFlow但没有成功
第一页:
var arr = ["masoud" , "hossein", "reza" , "shiva" , "fateme"]
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("item selected is : \(indexPath.row)")
// if indexPath.row == 1 {
performSegue(withIdentifier: "TableSegue", sender: nil)
//}
tableView.deselectRow(at: indexPath, animated: true)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch (segue.destination.view, segue.destination, sender) {
case let (_, controller as WebKitController, indexPath as NSIndexPath):
controller.indexPath = indexPath
break
default:
break
}
}
第二页:
import WebKit
class WebKitController: UIViewController, WKUIDelegate, WKNavigationDelegate {
@IBOutlet weak var myWebKit: WKWebView!
var reza : String = String()
var indexPath: NSIndexPath? {
didSet {
reza = (indexPath?.row.description)!
print(indexPath?.row as Any)
self.myWebKit.uiDelegate = self
self.myWebKit.navigationDelegate = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
let url = Bundle.main.url(forResource: "reza", withExtension: "html", subdirectory: "ReZeynoo2")!
myWebKit.loadFileURL(url, allowingReadAccessTo: url)
let request = URLRequest(url: url)
myWebKit.load(request)
self.myWebKit.uiDelegate = self
self.myWebKit.navigationDelegate = self
}
您需要在WebKitController
类中创建一个Int
变量,作为selectedRow
,其中将从表视图单元格选择中分配所选行,
// MARK: - Table view delegates
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.performSegue(withIdentifier: "TableSegue", sender: indexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "TableSegue", let indexPath = sender as? IndexPath {
let webController = segue.destination as? WebKitController
webController.selectedRow = indexPath.row
}
}
我想你可以通过你的indexpath.row
在你的发件人值perfomSegue
和你的第二个视图控制器只需使用这
这是代码
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "secondvc", sender: indexPath.row)
}
只需在发件人中发送indexpath.row
值
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "secondvc"{
let vc = segue.destination as! SecondViewController
vc.row = sender as! Int
}
}
作为替代方法
我不会存储一个简单的数组,但是会选择名称和bool的结构
struct CellData {
let name: String!
let isSelected: Bool!
let index: Int!
init(name: String, isSelected: Bool, index: Int) {
self.name = name
self.isSelected = isSelected
self.index = index
}
}
然后在didSelectAtRow函数中,将选择被点击的单元格,并使用此信息来准备segue函数
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.deselectAll()
self.cellItems[indexPath.row].isSelected = true
performSegue(withIdentifier: "TableSegue", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch (segue.destination.view, segue.destination, sender) {
case let (_, controller as WebKitController, indexPath as NSIndexPath):
if let item = cellItems.first(where: {$0.isSelected == true}) {
controller.indexPath = item.index
}
break
default:
break
}
}
private func deselectAll() {
for item in cellItems {
item.isSelected = false
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.