質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

Gesture等のダブルクリックや長押しした際の処理について

削除済ユーザー
削除済ユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

1460閲覧

投稿2018/05/22 17:37

編集2022/01/12 10:58

swift

struct Cell { var detail: [String] var lightswipe: Bool//detail var tag: Int } import UIKit class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{ @IBOutlet weak var mytableView: UITableView! //構造体 var titles: [String] = [] // title用 var products: [Cell] = []//detail func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // 全データの合計 return titles.count + products.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell() let index = Int(floor(Double(indexPath.row / 2))) //セルタップ時のハイライトについて cell.selectionStyle = .none // title行 if indexPath.row % 2 == 0 { guard titles.count > 0 else { return cell } let title = titles[index] cell.textLabel?.text = title //センター寄せ cell.textLabel!.textAlignment = NSTextAlignment.center cell.backgroundColor = UIColor(red: 0.0, green: 0.8, blue: 1.0, alpha: 0.3) // detail行 } else { cell.backgroundColor = UIColor.lightGray let item = products[index] guard item.detail.count > 0 else { return cell } var labels: [UILabel] = [] //labelについて for i in item.detail { let label = UILabel() label.backgroundColor = UIColor(red: 0.0, green: 0.8, blue: 0.9, alpha: 0.2) label.text = i // textLabel という名前の変数に格納された UILabel にフォントサイズの自動調整を設定します。 label.adjustsFontSizeToFitWidth = true label.minimumScaleFactor = 10.0 //丸みに対して label.layer.cornerRadius = 5 label.layer.masksToBounds = true cell.contentView.addSubview(label) labels.append(label) } var preLabel: UILabel? = nil for l in labels { l.translatesAutoresizingMaskIntoConstraints = false if (preLabel == nil) { l.leftAnchor.constraint(equalTo: cell.contentView.leftAnchor, constant: 12).isActive = true } else { l.leftAnchor.constraint(equalTo: preLabel!.rightAnchor, constant: 20).isActive = true } cell.contentView.heightAnchor.constraint(equalTo: l.heightAnchor, multiplier: 1).isActive = true preLabel = l } } return cell }

困っている箇所

swift

func deletealert() { let alert = UIAlertController(title:"you realy want to delete?", message: "メッセージ", preferredStyle: .alert) let okAction = UIAlertAction(title: "YES", style: .default, handler: { (action:UIAlertAction!) -> Void in //labelの削除について self.products[0].tag = 1 self.view.subviews.forEach { if $0.tag == 1{ $0.removeFromSuperview() } } }) alert.addAction(okAction) // キャンセルボタンの設定 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) alert.addAction(cancelAction) alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 // アラートを画面に表示 self.present(alert, animated: true, completion: nil) } //長押しやダブルクリックについて @objc func longpress(sender: UILongPressGestureRecognizer){ // 長押し開始〜 if(sender.state == UIGestureRecognizerState.began) { } else if (sender.state == UIGestureRecognizerState.ended) { //labelの削除について products[0].detail[0] = "" self.products[0].tag = 1 self.view.subviews.forEach { if $0.tag == 1{ $0.removeFromSuperview() } } //alert() print("ロングタップされたよ。") } } func Gesture() { // UILongPressGestureRecognizerインスタンス作成 let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longpress(sender:))) // 時間(デフォルト0.5秒) longPressGesture.minimumPressDuration = 0.5 products.isUserInteractionEnabled = true products.addGestureRecognizer(longPressGesture) } func doubleclic(){ // ダブルタップ let doubeltapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.doubletap(sender:))) doubeltapGesture.numberOfTapsRequired = 2 products.isUserInteractionEnabled = true products.addGestureRecognizer(doubeltapGesture) } @objc func doubletap(sender: UITapGestureRecognizer){ if(sender.state == UIGestureRecognizerState.began) { }else if(sender.state == UIGestureRecognizerState.ended) { deletealert() } }

実現したい事・困っている事

products.isUserInteractionEnabled = true
products.addGestureRecognizer(doubeltapGesture)

Value of type '[Cell]' has no member 'isUserInteractionEnabled'
Value of type '[Cell]' has no member 'addGestureRecognizer'
上記のコードでこの様なエラーが出てしまいました。実現したい事としてはセルの中のラベルをダブルタップや長押しをできる様にしたいです。
しかし、コーディングの際にcellForRowAT内にラベルのインスタンスを作ったのでどう結びつければいいのか分からなくて困っています。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています