ios - style - uitableview section




如何檢測在swift中觸摸或單擊的tableView單元格 (6)

我想在 TableView 獲取所選項目的 index 並在此之後開始一些活動。 不幸的是,我發現的大多數解決方案都是客觀的,或者不起作用。

方法 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 不打印 cell 標籤。

有人可以幫幫我嗎?

import UIKit
import ResearchKit

class TaskListViewController: UIViewController, UITableViewDataSource {

    let tasks=[("Short walk"),
        ("Audiometry"),
        ("Finger tapping"),
        ("Reaction time"),
        ("Spatial span memory")
    ]


    //how many sections are in your table
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    //return int how many rows
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tasks.count
    }

    //what are the contents

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = UITableViewCell()

        var (testName) = tasks[indexPath.row]
        cell.textLabel?.text=testName
        return cell
    }

    // give each table section a name

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        return "Tasks"

    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let indexPath = tableView.indexPathForSelectedRow();

        let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!

        println(currentCell.textLabel!.text)
    }


    override func viewDidLoad() {
        super.viewDidLoad()

    }  
}

經過幾次嘗試後,我將代碼更改為與我找到的教程不同的代碼。 它也不起作用。 現在我認為這是iOS模擬器的問題...

import UIKit
import ResearchKit

class TaskListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet
    var tableView: UITableView?
    var items: [String] = ["We", "Heart", "Swift"]

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell:UITableViewCell = self.tableView!.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

        cell.textLabel?.text = self.items[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        println("You selected cell #\(items[indexPath.row])!")
    }

}


一些需要發生的事情......

  1. 視圖控制器需要擴展 UITableViewDelegate 類型

  2. 視圖控制器需要包含 didSelectRowAt 函數。

  3. 表視圖必須將視圖控制器指定為其委託。

下面是一個可以進行分配委託的地方(在視圖控制器內)。

override func loadView() {
    tableView.dataSource = self
    tableView.delegate = self
    view = tableView
}

以及 didSelectRowAt 函數的簡單實現。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("row: \(indexPath.row)")
}


我每次都搞砸了! 只需確保在 viewDidLoad 中聲明了 tableView 委託和 dataSource 。 然後我通常填充一些數組來模擬返回的數據然後從那裡拿走它!

//******** Populate Table with data ***********
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? SetupCellView
    cell?.ControllerLbl.text = ViewContHeading[indexPath.row]
    cell?.DetailLbl.text = ViewContDetail[indexPath.row]
    cell?.StartupImageImg.image = UIImage(named: ViewContImages[indexPath.row])
    return cell!
}

繼承tableview委託和數據源。 實施代表您需要的東西。

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
    }

最後實現這個​​委託

     func tableView(_ tableView: UITableView, didSelectRowAt  
     indexPath: IndexPath) {
     print("row selected : \(indexPath.row)")
  }

在Swift 3.0中

您可以通過委託方法找到觸摸/單擊tableview單元格的事件。 同樣,可以像這樣找到單元格的section和row值。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
       print("section: \(indexPath.section)")
       print("row: \(indexPath.row)")
}

從觸摸或單擊swift中的tableView單元格中獲取Array中的元素

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell
    cell.textLabel?.text= arr_AsianCountries[indexPath.row]
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let indexpath = arr_AsianCountries[indexPath.row]
print("indexpath:\(indexpath)")
}