2016-08-29 10 views
1

私は表示するためにdequeueReusableCellWithIdentifierを使用しているカスタムセルを持っています。これはplistファイルによって作成されます。私はここや他の場所で発見したガイドのすべてに基づいて適切にセグエするために、これを取得に取り組んでいますカスタムセルSegueセカンダリビューコントローラへのデータの送信

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("challengeCell", forIndexPath: indexPath) as! ChallengeCell 
    // set labels 
    cell.ChallengeLabel.text = challengeLevels[indexPath.row].uppercaseString 
    cell.ChallengeMaxPoints.text = "Score: " + challengeMaxScore[indexPath.row] 
    cell.SizeLabel.text = "Size: " + challengeSize[indexPath.row] 
    // set color 
    cell.ChallengeLabel.textColor = UIColor.whiteColor() 
    cell.ChallengeMaxPoints.textColor = UIColor.whiteColor() 
    cell.SizeLabel.textColor = UIColor.whiteColor() 
    return cell 
} 

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

関連する変数があたり、このクラスChallengeListViewControllerで上に割り当てられている
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    challengeSelected = indexPath.row 
    print("Send selected \(challengeSelected)") 

    self.performSegueWithIdentifier("ChallengeSelected", sender: challengeSelected); 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "ChallengeSelected") { 
     if let nextViewController = (segue.destinationViewController as? LevelListViewController) 
     { 
      print(challengeSelected) 
      nextViewController.selectedChallenge = challengeSelected 
     } 
    } 
} 

下記:

var challengeSelected: Int = 0 

コードはエラーになりませんが、値を送信しません。下記のとおり対応のViewControllerリスト:

class LevelListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var selectedChallenge: Int = 0 
    let getLevels = LevelList(challengeNumber: 1) 
    var puzzleLevels: [String] = [] 
    var solvedStatus: [String] = [] 

    // UITableViewDataSource for Table 
     override func viewDidLoad() { 
     super.viewDidLoad() 

     print ("Receive Selected: \(selectedChallenge)") 
     //Initalize Arrays 
     var x = 0 
     for _ in getLevels.levels { 
      puzzleLevels.append(getLevels.levels[x][0] as! String) 
      x = x + 1 
      } 

      //print (puzzleLevels.count) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func prefersStatusBarHidden() -> Bool { 
     return true 
    } 

    //How to create a table 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("levelListCell", forIndexPath: indexPath) as! LevelListCell 

     // set labels 
     cell.levelNameLabel.text = puzzleLevels[indexPath.row].uppercaseString 
     cell.levelStatusLabel.text = "Not Solved" 

     // set color 
     cell.levelNameLabel.textColor = UIColor.whiteColor() 
     cell.levelStatusLabel.textColor = UIColor.whiteColor() 
     return cell 
    } 

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

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     print("selected \(indexPath.row)") 
    } 

} 

編集:seguesの

スクリーンショットは、以下の次の:

Segue Screen Shot #1 Segue Screen Shot #2

ヘルプは本当に感謝です。私は困惑している。

は、

リッチ

+1

challengeSelectedは印刷されていますか? – Shades

+0

はい。選択した送信は3で受信は0です。これは、Segueがクリックの前に呼び出されてから再び呼び出されないようなものです。下のサンプル出力。 0 受信選択:0 選択送信3 2016-08-29 17:16:44.517 Word Master [22766:822280] >のウィンドウがのビューのウィンドウと等しくない! – Apocal

+0

「選択した送信\(challengeSelected)」が最初に印刷された行になります。あなたのストーリーボードにセグがありますか? – Shades

答えて

1

あなたのコード内のセグエを行う際に、また、細胞自体からストーリーボードで設定セグエを持たないように注意してください、ありがとうございました。 segueはView Controllerから作成する必要があります。それ以外の場合は、セルが選択されると、コードにそのコースを実行する適切な機会を与えることなく、セグが発生しています。

ストーリーボードの現在のセグを削除します。 CTRLを押しながらをビューコントローラー(セルではない)からLevelListViewControllerにドラッグし、「ChallengeSelected」と命名します。さて、あなたはセルを選択すると、didSelectRowAtIndexPath()が最初に発生しますし、編集performSegueWithIdentifier()

enter image description here

を呼び出します:あなたがdidSelectRowAtIndexPath()に行うために探しているすべてのことを行を取得している場合

セグを実行すると、ストーリーボードからのセルセグを持つ元の設定を維持して、didSelectRowAtIndexPath()を削除してprepareForSegue()を削除できます。

challengeSelected = self.tableView.indexPathForSelectedRow?.row 
nextViewController.selectedChallenge = challengeSelected 
+0

ありがとう!それはそれを修正した。私はそれを2日間働かせようとしていました。 – Apocal

+0

@Apocal確かなこと – Shades

関連する問題