いつもお世話になります。
送られてきたUIButtonの座標をtableViewの座標に変換してそこからインデックスパスを取得したいのですが、
tableViewの座標(CGPoint
)に変換した際に、xの値が画面外を示してしまいます。どこか設定漏れ等あるのでしょうか?
ボタンが乗っているCellはXIBをレジスタして使用しています。
現状他の方法(open func indexPath(for cell: UITableViewCell) -> IndexPath?
)をつかってセルを投げてそこから
インデックスを取得しているのですが、座標から求めたいので、ご存知でしたら教えてください。
class ViewController: UIViewController, UITableViewDataSource, TestDelegate { func printTappedCellIndexPath(tappedBtn: UIButton) { print(tappedBtn) // => frame: = (257.667 60; 60 30) //タップされたボタンの乗っているセルのインデックスパスを取得する let point = tTableView.convert(tappedBtn.center, from: tappedBtn) print(tTableView.frame) //=> (18.666666666666657, 63.99999999999997, 337.6666666666667, 440.3333333333333) print(point) // => point: (545.3333333333334, 285.0) xがやたら大きい // 座標からindexPathを取得する =>ここでnil guard let indexPath = tTableView.indexPathForRow(at: point) else { return } print("### indexPath:", indexPath) } @IBOutlet weak var tTableView: UITableView! var tArray = ["AAA", "BBB", "CCC", "DDD"] override func viewDidLoad() { super.viewDidLoad() let cellNib = UINib.init(nibName: "CustomCell", bundle: Bundle.main) tTableView.register(cellNib, forCellReuseIdentifier: "CCell") } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tArray.count } func tableView( _ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell( withIdentifier: "CCell", for: indexPath) as! CustomCell cell.TestDelegate = self cell.tLabel.text = tArray[indexPath.row] return cell } } protocol TestDelegate: class { func printTappedCellIndexPath(tappedBtn: UIButton) }
swift
1import UIKit 2 3class CustomCell: UITableViewCell { 4 5 //MARK: - delegate 6 weak var TestDelegate: TestDelegate? 7 8 @IBOutlet weak var tLabel: UILabel! 9 10 override func awakeFromNib() { 11 super.awakeFromNib() 12 // Initialization code 13 } 14 15 override func setSelected(_ selected: Bool, animated: Bool) { 16 super.setSelected(selected, animated: animated) 17 18 // Configure the view for the selected state 19 } 20 21 @IBAction func btnTapped(_ sender: UIButton) { 22 TestDelegate?.printTappedCellIndexPath(tappedBtn: sender) 23 } 24 25 26} 27
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/29 02:09 編集