2016-03-27 2 views
0

私はXcode 7.3を使い、Swift 2.2を使っています。最初のビューコントローラから2番目のビューコントローラにデータを渡すのに問題があります。私は変数を作成しましたstringテーブルビューで選択された行を保持し、それが動作する私の最初のビューコントローラで。また、選択した行の名前を保持し、ラベルにテキストを渡す必要がある別の変数stringを2番目のビューコントローラに作成しました。テーブルビューで選択した行文字列を別のViewControllerページに渡すにはどうすればいいですか? (Swift 2)

すべてが最初のビューコントローラで完全に細かい単位で動作し、テーブルビューの行を押すたびにフルーツ名が表示されます。実際の問題は、第2ビューコントローラのselectedFruit2文字列が、最初のビューコントローラからのデータを取得しないことです。どんな手掛かり?

import UIKit 
import Parse 

class Scanner2: UIViewController { 

@IBOutlet var fruitNameLabel: UILabel! 

var selectedFruit2 = String() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    print(selectedFruit2) 

} 

} 
+0

'loadView'のドキュメント:"決してこのメ​​ソッドを直接呼び出すべきではありません "。また、ビューをロードした後に 'selectedFruit2'を設定していることにも注意してください。 'viewWillAppear(_ :)'はおそらく 'viewDidLoad'よりも安全でしょう – Sulthan

答えて

0

セグエでストーリーボードにあなたのViewControllerを接続し、 "としてその識別子を設定します。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let fruitName:Scanner2 = self.storyboard?.instantiateViewControllerWithIdentifier("scanPage") as! Scanner2 
    selectedFruit = textArray[indexPath.row] 
    fruitName.selectedFruit2 = selectedFruit 
    self.presentViewController(fruitName,animated:true,completion:nil) 
} 
+0

とても助かりました。ありがとうございました。私はprepareforsegue関数を前に試しましたが、私の本当の重要な部分ですストーリーボードをsegueに接続して実行するようにしました。 私はこれで3日間近くここにこだわっていました。これは迅速な2の新しいものですか? – bbkrz

+0

これはstoryBoardで使用するための基本的なメカニズムではありませんが、これは迅速な前にも同じでした:Dとにかく...今はそれを知っています。基本的には、ストーリーボードでVCをプログラムでインスタンシエートする必要はなく、代わりにsegueを使用することも、カスタムトランジションでカスタムサブクラスを使用することもできます。 –

0

あなたのtableViewで、これを試してみてください:didSelectedRowAtIndexPath:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
if let indexPath = self.tableView.indexPathForSelectedRow { 
let destinationVC = segue.destinationController 
destinationVC.string = textArray[indexPath] //this is the string in second view controller 
} 
} 
0

あなたはこれを試みることができます例えば、「scanPageSegue」...

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("scanPageSegue", sender: textArray[indexPath.row]) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "scanPageSegue" { 
     if let fruitName = segue.destinationViewController as? Scanner2, 
      selectedFruit = sender as? String { 
      fruitName.selectedFruit2 = selectedFruit 
     } 
    } 
} 
1

グローバル変数を作成してoverride func prepareForSegueメソッドでは、tableView.indexPathForSelectedRow!.rowで初期化できます。これが私のやり方で、うまくいきました。

関連する問題