こちら↓の質問から派生しています。
リンク
やりたいこと
データ表示しているtableViewCellのIndexPath
をInt
で取得したいです。
試したこと・試していること
- macOSのtableViewメソッドにある
selectAll
のiOS版(tableViewで使用可能な)がないか探したり尋ねたりしました。
→結果:ないので自作、という結論に。
selectRow
メソッドをfor in
文内で使用し、どのような動きになるのか確認したいと思い試している最中でIndexPath
がInt
で所得できずに詰まっています。(IndexPath
(Int)ではなく[IndexPath]
で取得してしまっています。)
以下、[IndexPath]
で取得してエラーが出ているコードです。なお、tableViewCellに表示させるデータはfirebase firestoreから取得しています。(UITableViewDelegateは省略しております)
swift
1import UIKit 2import Firebase 3 4class DraftViewController: UIViewController, UITextFieldDelegate { 5 6 let db = Firestore.firestore() 7 let user = Auth.auth().currentUser 8 private var draftData:[QueryDocumentSnapshot] = [] 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 //複数選択できるようにする 14 tableView.allowsMultipleSelectionDuringEditing = true 15 //firestoreのdraftsデータを取得 16 getDraftsData() 17 } 18 19 //firestoreのdraft data を取得 20 func getDraftsData() { 21 guard let uid = user?.uid else { return } 22 db.collection("drafts").whereField("uid", isEqualTo: uid).getDocuments() { (querysnapshot, err) in 23 if let err = err { 24 print("error getting documents: (err)") 25 } else { 26 let personalDraftData = querysnapshot!.documents.sorted {personalDraftData,provisionalDraftData in 27 guard let personalDraftsData = personalDraftData.data()["timestamp"] as? Timestamp, 28 let provisionalDraftsData = provisionalDraftData.data()["timestamp"] as? Timestamp else { return false } 29 return (personalDraftsData.dateValue() > provisionalDraftsData.dateValue()) 30 } 31 32 self.draftData = personalDraftData 33 self.tableView.reloadData() 34 } 35 } 36 } 37}
swift
1extension DraftViewController: UITableViewDataSource { 2 3 @IBAction func tapCloseButton(_ sender: Any) { 4 guard let indexPaths = tableView.indexPathsForVisibleRows else { return } 5 let allIndexPaths = indexPaths.count 6 guard let imageView = UIImage(named: "check mark") else { return } 7 8 if closeButton.image == nil && closeButton.title == "Check all" { //全てのtable cell を選択する 9 for _ in 0 ..< allIndexPaths { 10 tableView.selectRow(at: indexPaths, animated: true, scrollPosition: .none) 11 } 12 } else if closeButton.image == nil && closeButton.title == "Unselect all" { 13 // 選択しているcellのチェックマークを全て外す(クリアにする) 14 } 15 } 16 17 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 18 return draftData.count 19 } 20 21 //各cellの要素設定(インスタンスを生成する) 22 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 23 // cellを取得する 24 guard let cell = tableView.dequeueReusableCell(withIdentifier: "draftTableCell", for: indexPath) as? CustomizedTableViewCell else { 25 return UITableViewCell() 26 } 27 28 //cellに表示する値を設定する 29 cell.titleLabel.text = draftData[indexPath.row].data()["title"] as? String 30 cell.detailLabel.text = draftData[indexPath.row].data()["detail"] as? String 31 32 cell.titleLabel.numberOfLines = 0 33 cell.detailLabel.numberOfLines = 0 34 cell.titleLabel.lineBreakMode = .byWordWrapping 35 cell.titleLabel.lineBreakMode = .byWordWrapping 36 37 return cell 38 } 39 40 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 41 if editingStyle == .delete { 42 } 43 } 44} 45



回答2件
あなたの回答
tips
プレビュー