【現状・やりたいこと】
TableViewControllerのTableViewをIBOutletで宣言しています。
このやり方で前までTableを生成できていました。
【エラー】
前画面を作り変えてから、TableViewがnilになってしまい、TableView.delegateなどでTableViewがnilだとエラーになってしまいます。
コード
TableViewController
Swift
1 2import UIKit 3import Alamofire 4import SwiftyJSON 5 6class GroupsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ 7 8 @IBOutlet weak var TableView: UITableView! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 self.TableView.delegate = self 14 self.TableView.dataSource = self 15 self.TableView?.rowHeight = 80.0 16 17 } 18 19 func tableView(TableView: UITableView, numberOfRowsInSection section: Int) -> Int { 20 print(jsonArray.count) 21 return jsonArray.count 22 } 23 24 func tableView(TableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 25 色々書いてます 26 } 27
tableViewに入れる要素をカウントするmethodまで入っていってません。
IBOutletし直したり、名前を変えてみたりしましたが、うまくいきません。
よろしくお願いします。
【解決法】
元のコード
Swift
1let groupsView = GroupsViewController() 2self.navigationController?.pushViewController(groupsView, animated: true)
修正後のコード
Swift
1let storyboard = UIStoryboard(name: "Main", bundle: nil) 2let groupsView = storyboard.instantiateViewControllerWithIdentifier("GroupsViewController") 3self.navigationController?.pushViewController(groupsView, animated: true)
【新たな問題】
TouchUpイベントが複数回呼ばれてしまう。
addTagetの仕方が良くないのかなと思うのですが、どうすればよいかわかりません。。
Swift
1// MainViewCellInfo.swift 2 3import Foundation 4 5class MainViewCellInfo { 6 private(set) var projectName: String! 7 init(cellData cellData_: [String: AnyObject]){ 8 projectName = cellData_["projectName"] as! String 9 } 10}
Swift
1 2// MainViewTableCell.swift 3 4import UIKit 5 6class MainViewTableCell: UITableViewCell{ 7 8 @IBOutlet weak var projectNameLabel: UILabel! 9 @IBOutlet weak var Btn: UIButton! 10 11 class func nibName() -> String { 12 // クラス名と nib 名が同じ前提 13 return String(self) 14 } 15 16 class func cellId() -> String { 17 return String(self) 18 } 19 20 func setupWith(cellInfo cellInfo_: MainViewCellInfo) { 21 self.projectNameLabel.text = cellInfo_.projectName 22 //BtnにIDをセット 23 self.Btn.tag = cellInfo_.id 24 self.Btn.addTarget(MainViewController(), action: #selector(MainViewController.onMessageBtnClick(_:)), forControlEvents: .TouchUpInside) 25 } 26} 27
Swift
1// MainViewController.swift 2 3import UIKit 4import Alamofire 5import SwiftyJSON 6 7class GroupsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ 8 9 @IBOutlet weak var TableView: UITableView! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 self.TableView.delegate = self 15 self.TableView.dataSource = self 16 self.TableView?.rowHeight = 80.0 17 18 } 19 20 func tableView(TableView: UITableView, numberOfRowsInSection section: Int) -> Int { 21 print(jsonArray.count) 22 return jsonArray.count 23 } 24 25 func tableView(TableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 26 色々書いてます 27 } 28 29 func onMessageBtnClick(sender: UIButton) { 30 self.delegate._selectedProjectId = sender.tag 31 let storyboard = UIStoryboard(name: "Main", bundle: nil) 32 let nextVC = storyboard.instantiateViewControllerWithIdentifier("NextViewController") 33 self.navigationController?.pushViewController(nextVC, animated: true) 34 } 35} 36
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/11 01:33
2016/05/11 06:04
2016/05/11 11:28
2016/05/16 06:04
2016/05/16 06:47 編集
2016/05/16 07:02