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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Swift

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

解決済

tableViewCellのIndexPathを取得したい。

退会済みユーザー

退会済みユーザー

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Swift

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

2回答

0評価

0クリップ

3891閲覧

投稿2019/07/25 02:45

こちら↓の質問から派生しています。
リンク

やりたいこと

データ表示しているtableViewCellのIndexPathIntで取得したいです。

試したこと・試していること

  • macOSのtableViewメソッドにあるselectAllのiOS版(tableViewで使用可能な)がないか探したり尋ねたりしました。

→結果:ないので自作、という結論に。

  • selectRowメソッドをfor in文内で使用し、どのような動きになるのか確認したいと思い試している最中でIndexPathIntで所得できずに詰まっています。(IndexPath(Int)ではなく[IndexPath]で取得してしまっています。)

以下、[IndexPath]で取得してエラーが出ているコードです。なお、tableViewCellに表示させるデータはfirebase firestoreから取得しています。(UITableViewDelegateは省略しております)

swift

import UIKit import Firebase class DraftViewController: UIViewController, UITextFieldDelegate { let db = Firestore.firestore() let user = Auth.auth().currentUser private var draftData:[QueryDocumentSnapshot] = [] override func viewDidLoad() { super.viewDidLoad() //複数選択できるようにする tableView.allowsMultipleSelectionDuringEditing = true   //firestoreのdraftsデータを取得 getDraftsData() } //firestoreのdraft data を取得 func getDraftsData() { guard let uid = user?.uid else { return } db.collection("drafts").whereField("uid", isEqualTo: uid).getDocuments() { (querysnapshot, err) in if let err = err { print("error getting documents: (err)") } else { let personalDraftData = querysnapshot!.documents.sorted {personalDraftData,provisionalDraftData in guard let personalDraftsData = personalDraftData.data()["timestamp"] as? Timestamp, let provisionalDraftsData = provisionalDraftData.data()["timestamp"] as? Timestamp else { return false } return (personalDraftsData.dateValue() > provisionalDraftsData.dateValue()) } self.draftData = personalDraftData self.tableView.reloadData() } } } }

swift

extension DraftViewController: UITableViewDataSource { @IBAction func tapCloseButton(_ sender: Any) { guard let indexPaths = tableView.indexPathsForVisibleRows else { return } let allIndexPaths = indexPaths.count guard let imageView = UIImage(named: "check mark") else { return } if closeButton.image == nil && closeButton.title == "Check all" { //全てのtable cell を選択する for _ in 0 ..< allIndexPaths { tableView.selectRow(at: indexPaths, animated: true, scrollPosition: .none) } } else if closeButton.image == nil && closeButton.title == "Unselect all" { // 選択しているcellのチェックマークを全て外す(クリアにする) } } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return draftData.count } //各cellの要素設定(インスタンスを生成する) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // cellを取得する guard let cell = tableView.dequeueReusableCell(withIdentifier: "draftTableCell", for: indexPath) as? CustomizedTableViewCell else { return UITableViewCell() } //cellに表示する値を設定する cell.titleLabel.text = draftData[indexPath.row].data()["title"] as? String cell.detailLabel.text = draftData[indexPath.row].data()["detail"] as? String cell.titleLabel.numberOfLines = 0 cell.detailLabel.numberOfLines = 0 cell.titleLabel.lineBreakMode = .byWordWrapping cell.titleLabel.lineBreakMode = .byWordWrapping return cell } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { } } }

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

hayabusabusash

2019/07/25 03:33

どのあたりでエラーになりますか? また、どんなエラーが出ているのか教えていただけないでしょうか?
退会済みユーザー

退会済みユーザー

2019/07/25 03:47 編集

追記・修正依頼ありがとうございます! エラーが出ているのは 2つ目のコードの6行目あたり↓ if closeButton.image == nil && closeButton.title == "Check all" { //全てのtable cell を選択する for _ in 0 ..< allIndexPaths { tableView.selectRow(at: indexPaths, animated: true, scrollPosition: .none) } の、 `tableView.selectRow(at: indexPaths, animated: true, scrollPosition: .none)` 部分です。 エラー内容は↓です。 Cannot convert value of type '[IndexPath]' to expected argument type 'IndexPath?
hayabusabusash

2019/07/25 03:50

返信ありがとうございます! みにくくて申し訳ないですが、こんな感じにしたらエラーは消えませんか? if let indexPaths = tableView.indexPathsForVisibleRows { for indexPath in indexPaths { tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none) } }
退会済みユーザー

退会済みユーザー

2019/07/25 04:57

遅くなりました! やってみたところ、エラーも出なくなった上にやりたかったことがやれるようになっていっぺんに全部解決致しました!!!! ありがとうございます!!!( ;∀;)

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Swift

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