2017-05-01 16 views
0

cellForRowAtの下のcb.check(self.rowChecked [indexPath.row])行に、 'LolFirstTableViewController'タイプの値に 'rowChecked'というメンバーがありません私はrowCheckedをtasks.count個の項目を持つブール値の配列に設定しましたが、 cellForRowAtのほかにrowCheckedを初期化する必要がありますか、ここで何が間違っていますか?このコードのポイントは、テーブルの各セルにチェックボックスを表示してクリックして、アクセサリをチェックマークに変更し、再度クリックしてチェックマークを外すことです。チェックボックス自体は、CheckButtonという別のカスタムクラスです。私はまだスイフトを学んでいるので、どんな助けも大いに評価されるでしょう!ありがとうございました!タイプ '_'の値にメンバーがありません

import UIKit 

class LoLFirstTableViewController: UITableViewController { 

    var tasks:[Task] = taskData 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.rowHeight = UITableViewAutomaticDimension 
     tableView.estimatedRowHeight = 60.0 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return tasks.count 
    } 

    @IBAction func cancelToLoLFirstTableViewController(_ segue:UIStoryboardSegue) { 
    } 

    @IBAction func saveAddTask(_ segue:UIStoryboardSegue) { 
     if let AddTaskTableViewController = segue.source as? AddTaskTableViewController { 

      if let task = AddTaskTableViewController.task { 
       tasks.append(task) 

       let indexPath = IndexPath(row: tasks.count-1, section: 0) 
       tableView.insertRows(at: [indexPath], with: .automatic) 
      } 
     } 
    } 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath) as! TaskCell 

    let task = tasks[indexPath.row] 
     cell.task = task 

     var rowChecked: [Bool] = Array(repeating: false, count: tasks.count) 

    if cell.accessoryView == nil { 
       let cb = CheckButton() 
       cb.addTarget(self, action: #selector(buttonTapped(_:forEvent:)), for: .touchUpInside) 
       cell.accessoryView = cb 
    } 
      let cb = cell.accessoryView as! CheckButton 
      cb.check(self.rowChecked[indexPath.row]) 

      return cell 
    } 

func buttonTapped(_ target:UIButton, forEvent event: UIEvent) { 
      guard let touch = event.allTouches?.first else { return } 
      let point = touch.location(in: self.tableView) 
      let indexPath = self.tableView.indexPathForRow(at: point) 
     var tappedItem = tasks[indexPath!.row] as Task 
     tappedItem.completed = !tappedItem.completed 
     tasks[indexPath!.row] = tappedItem 
      tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.none) 
    } 

答えて

1

あなたはローカル変数としてrowCheckedを宣言し、それがクラスプロパティであるかのようにself.rowCheckedでそれを呼び出しています。

この問題を解決するには、rowCheckedの前にself.を削除してください。

旧:

cb.check(self.rowChecked[indexPath.row]) 

新:

cb.check(rowChecked[indexPath.row]) 

さらに問題があるかもしれませんが、それはあなたのコードなどのエラー現在立っている理由です。

1

tableView:cellForRowAtメソッド内にvar rowChecked: [Bool] = Array(repeating: false, count: tasks.count)という行があるため、ローカル変数です。クラスのプロパティではありません。

これは、この行を変更する必要があることを意味します。cb.check(self.rowChecked[indexPath.row])cb.check(rowChecked[indexPath.row])(削除済みself.)。

関連する問題