2017-01-10 4 views
-1

ビューコントローラに渡されるテキストがあり、セルラベルテキストをこれに設定しようとしています。私はこのコードを実行するとデリゲート機能を介して渡されたテキストにセルテキストラベルを設定

class oneViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, TypingDelegate { 
    @IBOutlet var tableView: UITableView! 

    var someText:String = "" 

    ... 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     print("TextA: \(someText)") 

     let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell") 
     cell.textLabel.text = someText 

     return cell 
    } 

    ... 

    func data(passedData:String) { 
     someText = passedData 
     print("TextB: \(someText)") 
    } 

    ... 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "showSecondVC" { 
      let sendingVC:OtherViewController = segue.destination as! OtherViewController 
      sendingVC.myDelegate = self 
     } 
    } 
} 

私が取得:

TextB: "pizza" 
TextA: "" 

「ピザ」の渡された値が「」ビューがロードされるたびに上書きされるように思えます。渡されたデータをデリゲート関数から取得し、セルテキストラベルをその値に設定するにはどうすればよいですか?予期しない動作がデリゲート機能によって引き起こされる可能性が

+1

に従って読み込むことができる順序付けされた値を格納する 'data(passedData:)'関数を呼び出すコードを追加してください。 – dan

+0

他のコード.. – JordanW

+0

"showOtherVC"セグをアンワインドセグ?おそらく 'TypingViewController'の上に' oneViewController'の別のコピーをプッシュ/プッシュするのではなく、 'TypingViewController'をポップ/ディスマウントして現在の' oneViewController'を表示します。 – dan

答えて

0

は、表の後に呼び出され

protocol TypingDelegate { 
    func data(passedData:String) 
} 

class TypingViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate, UISearchControllerDelegate { 

    var myDelegate:TypingDelegate? = nil 

    ... 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     tableView.deselectRow(at: indexPath, animated: false) 
     if myDelegate != nil { 
      let passedData = "pizza" 
      myDelegate?.typingData(passedName: passedName) 
      searchController.isActive = false 
      performSegue(withIdentifier: "showOtherVC", sender: self) 
     } 
    } 

    ... 

} 

ありがとう:ここで編集

は、他の(送信VC)のコードですビューロード。単にデリゲート関数の後にtableViewを再ロードするためにこれを行うが、これはsomeTextにすべてのセルのテキストラベルを設定することを

func data(passedData:String) { 
    someText = passedData 
    print("TextB: \(someText)") 
    tableView.reloadData() 
    } 

ノートと呼ばれる

。コレクションタイプ(配列、辞書)を使用して、indexPathの行プロパティ(indexPath.row

+0

私はこれを試しましたが、私はまだ同じ結果を持っています。他のアイデア? – JordanW

関連する問題