Cách phát hiện ô tableView được chạm hoặc nhấp nhanh chóng


77

Tôi đang cố lấy indexvật phẩm đã chọn TableViewvà bắt đầu một số hoạt động sau đó. Thật không may, hầu hết các giải pháp mà tôi tìm thấy là trong mục tiêu-c hoặc không hoạt động.

Phương pháp func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)không in cellnhãn ..

Ai đó có thể giúp tôi được không?

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()
        
    }  
}

Sau một vài lần thử, tôi đã thay đổi mã thành một mã khác với hướng dẫn mà tôi tìm thấy. Và nó cũng không hoạt động. Bây giờ tôi nghĩ đây là vấn đề với trình mô phỏng 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])!")
    }
    
}

Câu trả lời:


82

Nếu bạn muốn giá trị từ ô thì bạn không phải tạo lại ô trong didSelectRowAtIndexPath

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    println(tasks[indexPath.row])
}

Nhiệm vụ sẽ như sau:

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

bạn cũng phải kiểm tra xem cellForRowAtIndexPathbạn phải đặt mã định danh.

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

Hy vọng nó giúp.


42

Trong Swift 3.0

Bạn có thể tìm thấy sự kiện cho lần chạm / bấm vào ô của chế độ xem bảng thông qua phương pháp ủy quyền nó. Đồng thời, có thể tìm thấy phần và giá trị hàng của ô như thế này.

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

15

Một vài điều cần phải xảy ra ...

  1. Bộ điều khiển chế độ xem cần mở rộng loại UITableViewDelegate

  2. Bộ điều khiển chế độ xem cần bao gồm didSelectRowAtchức năng.

  3. Dạng xem bảng phải có bộ điều khiển dạng xem được chỉ định làm đại biểu của nó.


Dưới đây là một nơi mà việc chỉ định đại biểu có thể diễn ra (trong bộ điều khiển chế độ xem).

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

Và một thực hiện đơn giản của didSelectRowAtchức năng.

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

10

Vấn đề đã được giải quyết bởi chính tôi bằng cách sử dụng hướng dẫn của weheartswift

nhập mô tả hình ảnh ở đây


6
Câu trả lời đã chọn có thực sự khắc phục được sự cố không? Nếu nó không khắc phục được sự cố, vui lòng viết giải pháp vào câu trả lời của bạn hoặc chọn câu trả lời thích hợp để sửa câu hỏi bạn đã hỏi. Chỉ vì ai đó đưa ra sự trợ giúp và một giải pháp khả thi, không có nghĩa là câu trả lời của họ nên được chọn là câu đúng. Hãy sửa lỗi này.
Devbot 10

7

Điều này làm việc tốt cho tôi:

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

Đầu ra phải là:

section: 0
row: 0

5
Câu trả lời của bạn xuất hiện trùng lặp, như trả lời này dường như rất giống với trả lời trên stackoverflow.com/a/41583381/40867
jdev

6

Kế thừa ủy nhiệm tableview và nguồn dữ liệu. Thực hiện ủy quyền những gì bạn cần.

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

Và cuối cùng thực hiện đại biểu này

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

4

Để lấy một phần tử từ Mảng trong ô tableView, hãy chạm hoặc nhấp nhanh

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)")
}

3
 # Check delegate? first must be connected owner of view controller

    # Simple implementation of the didSelectRowAt function.

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
         print("row selection: \(indexPath.row)")
    }

2

Tôi rất thích mọi lúc! Chỉ cần đảm bảo rằng người được tableViewủy quyền và dataSourceđược khai báo trong viewDidLoad. Sau đó, tôi thường điền một vài mảng để mô phỏng dữ liệu trả về và sau đó lấy nó từ đó!

//******** 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!
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.