したい動作は、上記のタイトルどうりです。
Objective-Cでは、ネットに記事があり実現出来るのですが、Swiftでの上手い書き方に困っています。
どうか宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
Objective-Cの記事はどちらを参考にされているのでしょうか?また「上手い」書き方ということは現状の「下手な」やり方をどう「上手く」したいのか具体化していただけると幸いです。
退会済みユーザー
2015/05/06 06:57
抽象的な表現が多すぎてすいません。http://iritec.jp/iphone/848/さんの記事を参考にしています。
これをSwiftに置き換えてビルドは通ったのですがセルをロングタップするとオプショナルエラーで落ちてしまいます。「下手と上手い」というのは、今現在Swiftでの書き方が知りたかったです。質問の仕方が曖昧で申し訳ございません。
回答1件
0
ベストアンサー
こんな感じかな?
lang
1import UIKit 2 3class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 @IBOutlet weak var tableView: UITableView! 6 var array : Array<String> = [] 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 self.tableView.delegate = self 12 self.tableView.dataSource = self 13 14 array = ["1", "2", "3", "4", "5", "6"] 15 16 let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "rowButtonAction:") 17 longPressRecognizer.allowableMovement = 15 18 longPressRecognizer.minimumPressDuration = 0.6 19 self.tableView .addGestureRecognizer(longPressRecognizer) 20 21 } 22 23 func rowButtonAction(sender : UILongPressGestureRecognizer) { 24 25 let point: CGPoint = sender.locationInView(tableView) 26 let indexPath = tableView.indexPathForRowAtPoint(point) 27 28 if let indexPath = indexPath { 29 if sender.state == UIGestureRecognizerState.Began { 30 31 // セルが長押しされたときの処理 32 println("long pressed \(indexPath.row)") 33 } 34 }else{ 35 println("long press on table view") 36 } 37 } 38 39 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 40 return array.count 41 } 42 43 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 44 let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell 45 cell.textLabel?.text = array[indexPath.row] 46 return cell 47 } 48 49 override func didReceiveMemoryWarning() { 50 super.didReceiveMemoryWarning() 51 // Dispose of any resources that can be recreated. 52 } 53}
投稿2015/05/07 05:20
総合スコア1585
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/05/07 11:13
御回答有難うございました。
2022/02/23 01:59
参考になりましたありがとうございます。gesture部分のところのみSwift5で書き直しました。
let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(rowButtonAction(_:)))
longPressRecognizer.allowableMovement = 15
longPressRecognizer.minimumPressDuration = 0.5
tableView.addGestureRecognizer(longPressRecognizer)
//セルが長押しされたときの処理
@objc func rowButtonAction(_ sender: UILongPressGestureRecognizer) {
let point: CGPoint = sender.location(in:tableView)
let indexPath = tableView.indexPathForRow(at: point)
if let indexPath = indexPath {
if sender.state == UIGestureRecognizer.State.began {
// セルが長押しされたときの処理
print("long pressed \(indexPath.row)")
}
}else{
print("long press on table view")
}
}
あと「tableView」の部分は定義したtableViewの名前にしないとエラーが出る可能性があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。