0

同じ名前のセルには、で作成したデータを再ロードしたい、同じ名前のセルを持つ複数の「テーブルビュー」があります。 次のview controllerだけがreloadData()コールをnotificationとして取得し、現在のデータを送信してもそれを取得しません。さまざまなテーブルビューを同じリユース識別子でリロードする

これは私がすべてのビューコントローラに実装コードです:

import UIKit 

var NT = Table.MyTables.newTable 


class NewTableVC: UIViewController { 


    @IBOutlet weak var tableViewLiveCells: UITableView! 

    @IBOutlet weak var imageTableCreated: UIImageView! 

    @IBOutlet weak var tableNumberTF: UITextField! 
    @IBOutlet weak var guestNumberTF: UITextField! 
    @IBOutlet weak var timeLabelTable: UILabel! 
    @IBOutlet weak var prebooked: UISwitch! 
    @IBOutlet weak var dateLabel: UILabel! 

    @IBAction func createButton(_ sender: AnyObject) { 

     print("createButton tapped") 

     let newNumber = Int(tableNumberTF.text!) 
     let newGuestNumber = Int(guestNumberTF.text!) 
     let currentTimeArrival:String? = timeLabelTable.text 

     if (tableNumberTF.text?.isEmpty)! || (guestNumberTF.text?.isEmpty)! { 
      let alert = UIAlertController(title: "Missing input(s)", message: "Please fill in all the gaps", preferredStyle: .alert) 
      alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil)) 
      alert.addAction(UIAlertAction(title: "Back Home", style: .default, handler: {(alert: UIAlertAction) in 

       self.dismiss(animated: true, completion: nil) 


      })) 
      self.present(alert, animated: true, completion: nil) 

     } else { 

      let presentTable = Table(number: newNumber!, guests: newGuestNumber!, timeIn: currentTimeArrival!) 

      NT.append(presentTable) 

      print("This is a new table with the following values") 
      print(presentTable.number) 
      print(presentTable.guests) 
      print(presentTable.timeIn) 
      print(NT.count) 

      imageTableCreated.alpha = 1 
      imageTableCreated.layer.zPosition = 500 

      tableViewLiveCells.reloadData() 

      let deadline = DispatchTime.now() + .seconds(1) 
      DispatchQueue.main.async { 
       NotificationCenter.default.post(name: NSNotification.Name(rawValue: "load"), object: nil) 
      } 
      DispatchQueue.main.asyncAfter(deadline: deadline) { 
       self.imageTableCreated.alpha = 0 
       self.imageTableCreated.layer.zPosition = -500 

      } 

     } 
    } 
} 

@IBOutlet weak var tableViewLiveCells: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    NotificationCenter.default.addObserver(self, selector: #selector(self.reloadLive),name:NSNotification.Name(rawValue: "load"), object: nil) 
} 

func reloadLive(notification: NSNotification) { 
    tableViewLiveCells.reloadData() 
} 

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

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

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

    let tab: Table! 

    tab = NT[indexPath.row] 

    cell.configureLiveCell(tab) 

    return cell 
} 

これは、リロードするデータを作成するのViewControllerからLiveViewCell.swiftファイル

import UIKit 


class LiveViewCell: UITableViewCell { 


    @IBOutlet weak var tableNumberLeftLabel: UILabel! 
    @IBOutlet weak var guestNumbersLabel: UILabel! 

    @IBOutlet weak var timeInTableLabel: UILabel! 
    @IBOutlet weak var tableNumberLbl: UILabel! 
    @IBOutlet weak var timeRemainingLbl: UILabel! 


    var table: Table! 


    func configureLiveCell(_ NT: Table) { 

     layer.cornerRadius = 20 

     tableNumberLbl.text = "T" + String(NT.number) 
     timeRemainingLbl.text = String(time) 


    } 

    func configureCell(_ NT: Table) { 

     tableNumberLeftLabel.text = "T" + String(NT.number) 
     guestNumbersLabel.text = "COVERS:" + String(NT.guests) 
     timeInTableLabel.text = "TIME IN:" + NT.timeIn 

    } 



} 

です

reloadData()はいずれも機能しません新しいデータを作成するNewTableVCviewControllerの前のものを除き、他のデータを作成した後に作成した最初のデータです。 他のすべてのView Controllerに同じtableViewLiveCellsをコピーして貼り付けることに問題があるかもしれませんか? もしそうなら、私はテーブルビューを再作成しようとしましたが、ラベルを再び接続することはできません。

答えて

0

それはtableViewLiveCellsむしろ私はコピー&ペーストで使用される主なものよりも、それを含有するそれぞれの電流viewControllerからdelegatedataSourceを有していることが確認解きます。

0

コードにブレークポイントを設定し、通知がポストされていることを確認し、通知に応答する各ビューに通知が表示されていることを確認します。

通知は正しく設定されていますが、メソッド名がreloadLiveの場合は、reloadData()はView Controllerでは機能しません。私はまた、あなたが上記の最初のビューコントローラにあるようにviewDidLoadで応答するすべてのビュー設定をチェックし、それらのすべてがreloadLiveを持っていることを確認して、テーブルビューをリロードします。

NewTableVCのコードがそのビューコントローラの完全なコードである場合、そのビューコントローラは通知を受信するために追加されておらず、通知に応答するための呼び出し方法もありません。

+0

完全なコードにはオブザーバが含まれています。私は自分自身を繰り返さないように単純化し、何らかの理由で現在のテーブルビューを更新しないことを証明するためにデータを作成した直後にリロードを追加しました。後でブレークポイントで試してみて、何が起こるかを見ます。 – Christian

関連する問題