NiftyCloudからデータを取得して、それをTableViewのカスタムせるに表示させるのが目的です。
ViewWillAppear内でNCMBからデータを取得して、それを配列(:objects)に代入して、tableView.reloadDataを実行してますのでtableViewは更新されてるはずです。
データを取得後にprintでデータを確認しているのですが..。
カスタムセルに制約をつけたり、tableViewのrowHeighと高さを合わせたりしましたが、解決しません。
どうかご協力願います。
Swift
1import UIKit 2import NCMB 3 4class DetailViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 5 6 //ObjectIDを取得 7 var objectID = "" 8 9 //ページ用のSNSURL 10 var twitterURL = "" 11 var instagramURL = "" 12 var facebookURL = "" 13 14 //NCMBUser用の配列 15 var user = NCMBUser() 16 17 //URLとコメントを持つ配列 18 var object = ["",""] 19 //配列を格納する配列 20 var objects = [[String]]() 21 22 //セルの色を格納 23 var itemColor = UIColor() 24 //NCMBに保存用のセルカラー 25 var itemColor_Save = "" 26 27 @IBOutlet weak var tableView: UITableView! 28 @IBOutlet weak var themeImage: UIImageView! 29 @IBOutlet weak var iconImage: UIImageView! 30 @IBOutlet weak var userID: UILabel! 31 @IBOutlet weak var profileText: UITextView! 32 @IBOutlet weak var twitterIcon: UIImageView! 33 @IBOutlet weak var instagramIcon: UIImageView! 34 @IBOutlet weak var facebookIcon: UIImageView! 35 36 37 override func viewDidLoad() { 38 super.viewDidLoad() 39 40 //角丸 41 iconImage.layer.cornerRadius = 50 42 //枠線 43 iconImage.layer.borderWidth = 0.5 44 //調整 45 iconImage.layer.masksToBounds = true 46 twitterIcon.layer.cornerRadius = 40 47 twitterIcon.layer.borderWidth = 0.5 48 twitterIcon.layer.masksToBounds = true 49 instagramIcon.layer.cornerRadius = 40 50 instagramIcon.layer.borderWidth = 0.5 51 instagramIcon.layer.masksToBounds = true 52 facebookIcon.layer.cornerRadius = 40 53 facebookIcon.layer.borderWidth = 0.5 54 facebookIcon.layer.masksToBounds = true 55 56 //DetailViewCellを設定 57 tableView.register(UINib(nibName: "DetailViewCell", bundle: Bundle.main), forCellReuseIdentifier: "detailcell") 58 //tableViewのセルの高さを設定 59 tableView.estimatedRowHeight = 72 60 tableView.rowHeight = 72 61 //tableViewの不要なセルを削除 62 tableView.tableFooterView = UIView() 63 64 //セルの色を取得 65 if let _ = user.object(forKey: "ItemColor") { 66 itemColor_Save = user.object(forKey: "ItemColor") as! String 67 } else { 68 itemColor_Save = "gray" 69 } 70 confirmColor2() 71 72 } 73 74 override func viewWillAppear(_ animated: Bool) { 75 super.viewWillAppear(animated) 76 77 //取得したユーザーからデータを取得 78 profileText.text = (user.object(forKey: "Profile") as! String) 79 80 userID.text = "@" + (user.userName)! 81 82 //SNSのURLを取得 83 twitterURL = user.object(forKey: "TwitterURL") as! String 84 if twitterURL != "" { 85 twitterIcon.alpha = 1.0 86 } else { 87 twitterIcon.alpha = 0.5 88 } 89 instagramURL = user.object(forKey: "InstagramURL") as! String 90 if instagramURL != "" { 91 instagramIcon.alpha = 1.0 92 } else { 93 instagramIcon.alpha = 0.5 94 } 95 facebookURL = user.object(forKey: "FacebookURL") as! String 96 if facebookURL != "" { 97 facebookIcon.alpha = 1.0 98 } else { 99 facebookIcon.alpha = 0.5 100 } 101 102 //アイテムを取得 103 objects = user.object(forKey: "Item") as! [[String]] 104 //更新 105 print(objects) 106 107 //NCMBから画像を取得 108 if let readData_theme = NCMBFile.file(withName: "theme " + user.objectId, data: nil) as? NCMBFile { 109 //テーマ画像を取得 110 readData_theme.getDataInBackground { (data, error) in 111 if error != nil { 112 print(error) 113 } else { 114 self.themeImage.image = UIImage(data: data!) 115 } 116 } 117 } else { 118 //代わりの画像を用意 119 self.themeImage.image = UIImage(named: "icons8-画像-100.png") 120 } 121 122 if let readData_icon = NCMBFile.file(withName: "icon " + user.objectId, data: nil) as? NCMBFile { 123 //アイコン画像を取得 124 readData_icon.getDataInBackground { (data, error) in 125 if error != nil { 126 print(error) 127 } else { 128 self.iconImage.image = UIImage(data: data!) 129 } 130 } 131 } else { 132 //代わりの画像を用意 133 self.iconImage.image = UIImage(named: "icons8-コンタクト-96.png") 134 } 135 136 tableView.reloadData() 137 138 } 139 140 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 141 return objects.count 142 } 143 144 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 145 let cell = tableView.dequeueReusableCell(withIdentifier: "detailcell", for: indexPath) as! DetailViewCell 146 //URLの場合 147 if objects[indexPath.row][1] != "" { 148 cell.textLabel?.textColor = UIColor.white 149 cell.backgroundImageView.backgroundColor = itemColor 150 //コメントの場合 151 } else { 152 cell.textLabel?.textColor = UIColor.black 153 cell.backgroundImageView.backgroundColor = UIColor.white 154 } 155 //セルにtitleプロパティを代入 156 cell.textLabel?.text = objects[indexPath.row][0] 157 //セルのテキストを中央揃いにする 158 cell.textLabel?.textAlignment = .center 159 160 return cell 161 } 162 163 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 164 tableView.deselectRow(at: indexPath, animated: true) 165 //もしリンクならリンク先を開く 166 if objects[indexPath.row][1] != "" { 167 openSNSLink(url: objects[indexPath.row][1]) 168 } else {} 169 } 170 171 @IBAction func menu(_ sender: Any) { 172 let alert = UIAlertController(title: "メニュー", message: nil, preferredStyle: .alert) 173 let logoutAction = UIAlertAction(title: "ログアウト", style: .default) { (action) in 174 NCMBUser.logOutInBackground({ (error) in 175 if error != nil { 176 print("logout error") 177 } else { 178 //ログアウト 179 self.syncronize() 180 } 181 }) 182 } 183 let deleteAction = UIAlertAction(title: "退会", style: .destructive) { (action) in 184 let user = NCMBUser.current() 185 user?.deleteInBackground({ (error) in 186 if error != nil { 187 print("delete error") 188 } else { 189 //ログアウト 190 self.syncronize() 191 } 192 }) 193 } 194 let cancelAction = UIAlertAction(title: "キャンセル", style: .cancel) { (action) in 195 alert.dismiss(animated: true, completion: nil) 196 } 197 alert.addAction(logoutAction) 198 alert.addAction(deleteAction) 199 alert.addAction(cancelAction) 200 self.present(alert, animated: true, completion: nil) 201 } 202 203 //各SNSのジェスチャー 204 //Twitter 205 @IBAction func tapGesture_twitter(_ sender: UITapGestureRecognizer) { 206 openSNSLink(url: user.object(forKey: "TwitterURL") as! String) 207 } 208 //Instagram 209 @IBAction func tapGesture_instagram(_ sender: UITapGestureRecognizer) { 210 openSNSLink(url: user.object(forKey: "InstagramURL") as! String) 211 } 212 //Facebook 213 @IBAction func tapGesture_facebook(_ sender: UITapGestureRecognizer) { 214 openSNSLink(url: user.object(forKey: "FacebookURL") as! String) 215 } 216 217 //SNSのリンクをsafari経由で開く 218 @objc func openSNSLink(url:String) { 219 //http,httpsかを確認 220 if url.prefix(7) == "http://" || url.prefix(8) == "https://" { 221 //文字列をURLに変換 222 let url = URL(string: url)! 223 if UIApplication.shared.canOpenURL(url) { 224 UIApplication.shared.open(url) 225 } 226 } else {} 227 } 228 229 //選択したセルの色(文字列)を取得 230 func confirmColor1() { 231 .... 232 } 233 234 //選択したセルの色(文字列)からセルの色(UIColor)を取得 235 func confirmColor2() { 236 ... 237 } 238 239 //同期する際の処理 240 func syncronize() { 241 //storyboardを宣言 242 let storyboard = UIStoryboard(name: "SignIN", bundle: Bundle.main) 243 let next = storyboard.instantiateViewController(withIdentifier: "signin") as! SignINController 244 next.modalTransitionStyle = .crossDissolve 245 self.present(next, animated: true, completion: nil) 246 //ログイン状態を解除 247 let ud = UserDefaults.standard 248 ud.set(false, forKey: "LoginStatus") 249 ud.synchronize() 250 } 251 252} 253
回答2件
あなたの回答
tips
プレビュー