2016-04-03 8 views
0

SwiftでXCode内の2つのUITableView間でパラメータを渡そうとしています。Swiftの2つのUITableViewController間でデータを渡すにはどうすればよいですか?

私はここで質問してきましたが、指示に従ったにもかかわらずまだ固執しています。

私はストーリーボードをセットアップしました。私はここで問題を抱えていました。私が見つけたガイドの大部分が "ショー"シーグを使用していたからですが、何らかの理由で私は "プグ"シーグしか使用できません。私はドラッグすると、「表示」セグエを作成することができる方法はありません(私はWindowsとMacにCtrl /コマンドキーを理解していない上のリモートデスクトップ経由でMacを使用しています多分ためには?)それが動作するにもかかわらず

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    selectedIndex = indexPath.row 
} 

override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) { 
    if (segue.identifier == "secondSegue") { 
    let controller = segue.destinationViewController as! SecondViewController 
    controller.valuePassed = selectedIndex 
    } 
} 

をなんらかの理由で、渡されたインデックスは決して現在のものではありません。代わりに、2番目の画面で受け取った索引は前回選択した索引です。

「performSegueWithIdentifier」を使ってみましたが、アイテムをクリックすると2回目の画面が開きます。私はそれが "performSegueWithIdentifier"と一緒にそれらの間に "プッシュ"リンクがあると仮定します。

ストーリーボードの両方の画面をリンクせずにSegueの識別子を作成する方法がわかりません。

私のコードが間違っているかどうかわかりませんが、もし私がどうにかして "ショー"セグエを作成しなければならないのですか?(私は本当にiOSプログラミングでは新しく、プッシュとショーの実際の違いは分かりませんUITableViewのコンテキスト)、ストーリーボード上の画面をリンクせずにSegueの識別子を何とか作成しなければならない場合はどうすればいいですか...私は本当に固まってアイデアがありません。

ありがとうございました。ありがとう。

+0

「ショー」は、私が知る限り、「プッシュ」セグを現在呼び出すものです。だから、あなたは元気です。 –

+2

'didSelectRowAtIndexPath'の前に' prepareForSegue'が呼び出されます。 'prepareForSegue'で選択されたインデックスを取得したい場合は、' tableView.indexPathForSelectedRow.row'を使って取得してください。 – dan

+1

ここで起こっていることは、最初に呼び出すセルを選択するときにセルからVCへthd segueをリンクしていたからです。 prepareforsegue、次にselectedIndex = indexPath.rowを返します。そのため、segueをVCとVCに接続し、didselectでperformSegueWithIdentifierを呼び出してください。 –

答えて

2

performSegueWithIdentifierを使用する場合は、テーブルビューのセルではなく、ビューコントローラからセグをドラッグします。それ以外の場合は、あなたが言ったように、それは2回トリガされます。

selectedIndexを保存する代わりに、UITableViewindexPathForSelectedRowプロパティを使用してテーブルビューから取得することができます。これはオプションですので、適切にアンラップしてください。

+0

次の記事では、データビューコントローラを渡す際の参考になるいくつかの例を紹介しています。http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers?rq=1 – xdeleon

0

ティムは、上記の言ったことを試してみて、これにあなたのprepareForSegueコードを変更:

if segue.identifier == "secondSegue" { 

     let destinationVC : SecondViewController = segue.destinationViewController as! SecondViewController 

     // you can now pass whatever data you need to to the next view controller ... for example: destinationVC.dogName = dogName 

    } 

・ホープ、このことができます!

関連する問題