2016-08-27 5 views
1

TableViewControllerで選択したセルにラベルを渡そうとしています.2つ前のBackViewボタンを押すとTableViewControllerの静的セルのラベルに戻ります。私はdidSelectRowAtIndexPath()で正しいラベルを取得しています。データを印刷しようとするとデータは返されません。私は数多くのシナリオを試し、最後の手段としてここに来ました。どのような助けていただければ幸いですか? 1データは前回のtableviewコントローラに戻されません

tableviewcontroller:

class SearchTableViewController: UITableViewController, SortProtocol { 

var sort: String? 

override func viewDidLoad() { 
    super.viewDidLoad(

    SORTBYCELL.detailTextLabel?.text = sort 


} 
    func passdata(sort: String?){ 
    self.sort = (sort) 
    } 

TableViewController 2:

protocol SortProtocol { 
func passdata(sort: String?) 
} 
class SortByTable: UITableViewController { 

var delegate: SortProtocol? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
} 

override func tableView(tableView: UITableView,   didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let current = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 

    let sort = current.textLabel!.text! 

    self.delegate?.passdata(sort) 
+0

vc1では、vc1への参照を取得してそれを代理人に割り当てる必要があります。ナビゲーションコントローラを使用していますか? – Shades

+0

ビューをロードしたときにviewDidLoadが一度だけ実行されるため、この 'SORTBYCELL.detailTextLabel?.text = sort' 'をfuncのpassdata(ソート:文字列?){...}に配置します。 – KSR

答えて

0

デリゲートを割り当てる必要があります。 「戻る」ボタンがある場合は、ナビゲーションコントローラを使用していると仮定します。これを使用して、最初のviewControllerへの参照を取得します。したがって、SortByTableのviewDidLoad()は次のようになります。

override func viewDidLoad() { 
    super.viewDidLoad() 

    let searchVC = self.navigationController?.viewControllers[0] as! SearchTableViewController 
    self.delegate = searchVC 

    tableView.delegate = self 
} 
+0

どのように私はユーザーが「SortByTable」に戻ったときに私の問題を解決したことを助けてくれてありがとう –

+0

@JoeDodge前に選択した行のチェックマーク?選択したセルを追跡する変数が必要です。 iewControllerが画面に戻ったら、変数をチェックして選択した行を設定します – Shades

+0

そうです、それはすごくうまくいきます... Web開発をやってから約1ヶ月前にiOSアプリケーションを作成し始めました。私はあなたの助けに感謝します –

0

あなたはdelegateは、(例えば、それにブレークポイントを設定することにより)nilていないことを確認した場合にあなたのコードは言及していません。

最良の選択肢UITableViewCell秒更新データソースメソッドを介してそうすることである。

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

だから、あなたの場合には、sortの新しい値でpassdata更新あなたのデータソースを作成し、その後、tableView.reloadData()を呼び出しますセルをリロードする。

+0

セルのラベルは静的です。アウトレットは、ファイル内の各セルのラベルに、私が選択しているセルは配列からです。私はそれをsegueの準備をしていたが、私はこのようにしたい。ちょうどそれを渡すことはありません –

+0

私はデータソースを使用して行く方法だと思う、IBOutlet'sを設定する場合、クラスからプロトタイプのセルに動作する必要があります私は確信していません。 – paulvs

関連する問題