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])!") } }
セルの値が必要な場合は、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
}
それが役に立てば幸い。
Swift 3.0の場合
デリゲートメソッドを使用して、tableviewのセルのタッチ/クリックのイベントを見つけることができます。同様に、このようなセルのセクションと行の値を見つけることができます。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("section: \(indexPath.section)")
print("row: \(indexPath.row)")
}
weheartswift のチュートリアルを使用して、自分で問題を解決しました
発生する必要があるいくつかのことの...
View Controllerは、型を拡張する必要がありますUITableViewDelegate
View Controllerには、didSelectRowAt
関数を含める必要があります。
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)")
}
これは私にとってはうまくいきました:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("section: \(indexPath.section)")
print("row: \(indexPath.row)")
}
出力は次のようになります。
section: 0
row: 0
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でタッチまたはクリックされた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)")
}
# 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)")
}
私は毎回失敗します! tableView
デリゲートとdataSource
がviewDidLoad
で宣言されていることを確認してください。その後、通常、返されたデータをシミュレートするためにいくつかの配列を作成し、そこから取得します!
//******** 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!
}