ios - Swift 4.2 - 如何从 tableView 中的 "indexPath.row"方法调用 "didSelectRowAtIndexPath"到另一个类?

标签 ios iphone swift

我有两个 View Controller 。一个有一个 tableView,它有一些来自数组的单元格;另一个是 viewController,它包含一个我想显示一些本地 HTML 文件的 webkit。此外,我将 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
        }

最佳答案

作为替代方法

我不会存储一个简单的数组,但是否选择了名称和 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
    }
}

关于ios - Swift 4.2 - 如何从 tableView 中的 "indexPath.row"方法调用 "didSelectRowAtIndexPath"到另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53924349/

相关文章:

ios - 将 UIColor 值分配给宏

javascript - React Native/node 问题 : The package was successfully found. 但是,该包指定了无法解析的 `main` 模块字段

javascript - QuickConnect 相对于 Phonegap 的优势?

jquery - 点击关闭按钮图像它不会在 iPhone 中第一次点击时关闭

ios - 将光标定位在所需位置 iOS Swift 3

swift - 不能将 Nil 分配给类型 AVCaptureDeviceInput

ios - 比较 2 个结构数组

ios - 如何在 SpriteKit 中使用物理原理让移动的 Sprite 掉落

iphone - 第一个iPhone应用程序由于未知原因而崩溃

objective-c - 动态改变 UITableViewCell 的附属 View 图像