web-dev-qa-db-ja.com

swiftでタッチまたはクリックされたtableViewセルを検出する方法

indexで選択されたアイテムのTableViewを取得し、その後いくつかのアクティビティを開始しようとしています。残念ながら、私が見つけた解決策のほとんどは、objective-cにあるか、機能しません。

メソッドfunc tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)cellラベルを印刷しません。

誰かが私を助けてくれますか?

 import UIKit 
 import ResearchKit 
 
 class TaskListViewController:UIViewController、UITableViewDataSource {
 
 let tasks = [( "Short walk"] )、
(「聴力検査」)、
(「指タップ」)、
(「反応時間」)、
(「空間スパンメモリー」)
 
 
 
 //テーブルにあるセクションの数
 func numberOfSectionsInTableView(tableView:UITableView)-> Int {
 return 1 
} 
 
 // intを返す行数
 func tableView(tableView:UITableView、numberOfRowsInSectionセクション:Int)-> Int {
 return tasks.count 
} 
 
 //内容は何ですか
 
 func tableView(tableView:UITableView、cellForRowAtIndexPath indexPath:NSIndexPath)- > UITableViewCell {
 var cell = UITableViewCell()
 
 var(testName)= tasks [indexPath.row] 
 cell.textLabe l?.text = testName 
 return cell 
} 
 
 //各テーブルセクションに名前
 
 func tableView( tableView:UITableView、titleForHeaderInSectionセクション: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)
} 
 
 
 func viewDidLoad()のオーバーライド{
 super.viewDidLoad()
 
} 
} 

数回試した後、見つけたチュートリアルとは別のコードにコードを変更しました。そして、それも動作しません。今、私はこれがiOSシミュレータの問題だと思っています...

 import UIKit 
 import ResearchKit 
 
 class TaskListViewController:UIViewController、UITableViewDelegate、UITableViewDataSource {
 
 @IBOutlet 
 var tableView:UITableView?
 var items:[String] = ["We"、 "Heart"、 "Swift"] 
 
 func viewDidLoad(){
 super.viewDidLoad()
 
 self.tableView!.registerClass(UITableViewCell.self、forCellReuseIdentifier: "cell")
} 
 
 
 func tableView(tableView:UITableView、numberOfRowsInSectionセクション: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( "選択したセル#\(items [indexPath.row])!")
} 
 
} 
 
68
pawisoon

セルの値が必要な場合は、didSelectRowAtIndexPathにセルを再作成する必要はありません。

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

タスクは次のようになります。

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

また、cellForRowAtIndexPathを確認する必要があります。識別子を設定する必要があります。

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
}

それが役に立てば幸い。

68
Ashish Kakkad

Swift 3.0の場合

デリゲートメソッドを使用して、tableviewのセルのタッチ/クリックのイベントを見つけることができます。同様に、このようなセルのセクションと行の値を見つけることができます。

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

weheartswift のチュートリアルを使用して、自分で問題を解決しました

enter image description here

9
pawisoon

発生する必要があるいくつかのことの...

  1. View Controllerは、型を拡張する必要がありますUITableViewDelegate

  2. View Controllerには、didSelectRowAt関数を含める必要があります。

  3. Table Viewには、デリゲートとしてView Controllerが割り当てられている必要があります。


以下は、(View Controller内で)デリゲートを割り当てることができる1つの場所です。

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

didSelectRowAt関数の簡単な実装。

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

これは私にとってはうまくいきました:

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

出力は次のようになります。

section: 0
row: 0
6
Mr Duck

Tableviewデリゲートとデータソースを継承します。必要なものをデリゲートに実装します。

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

そして最後にこのデリゲートを実装します

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

SwiftでタッチまたはクリックされたtableViewセルの配列から要素を取得するには

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
Sanjay Mali
 # 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
Prabhat Pandey

私は毎回失敗します! tableViewデリゲートとdataSourceviewDidLoadで宣言されていることを確認してください。その後、通常、返されたデータをシミュレートするためにいくつかの配列を作成し、そこから取得します!

//******** 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!
}
1
Lexter