2017-10-27 4 views
0

次のアプリケーションでは、UICollectionViewを使用しています。各セル(文字列)のテキストは、私のSQL Serverからダウンロードされます。これはかなりうまくいく。しかし、どういうわけか、私のアプリはときどき見えることがありますが、時にはそうではありません(これは、シミュレータやネイティブデバイスでも起こります)。 設定ボタン(右下)をクリックすると、私が使用しているカスタムセグと関係があると思います。Swift:UICollectionView +カスタムSegueで問題が発生する

@IBAction func settingsButton(_ sender: UIButton) { 
    // in order to prevent an exception, you have to add an Identity in Main.storyboard 
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

    // instantiate view controller by storyboard 
    let nextViewController = storyBoard.instantiateViewController(withIdentifier: "SettingsViewController") as! SettingsViewController 

    // custom segue 
    self.performSegue(withIdentifier: "SegueToRight", sender: sender) 

    // pass email 
    nextViewController.email = self.email 

    // switch view controller 
    self.present(nextViewController, animated:true, completion:nil) 
} 

は、右の表示:

は間違って表示される:

答えて

0
あなたは二つの異なるプレゼンテーションの方法を使用している ので、あなたの問題は、おそらく発生し

seguepresentを。

performSegue関数が既にトランジションを処理するため、self.present(nextViewController, animated:true, completion:nil)を削除してみてください。

nextViewController.email = self.emailまた、performSegueの前にを設定して、データが次のコントローラに正しく渡されるようにしてください。次の2つにコードを分割する必要がありますコメント

FOR

UPDATE。 その後

@IBAction func settingsButton(_ sender: UIButton) { 
    // custom segue 
    self.performSegue(withIdentifier: "SegueToRight", sender: sender) 
} 

オーバーライドprepareForSegue:sender:@IBActionperformSegueコールを呼び出す内部

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let nextViewController = segue.destination as! SettingsViewController 
    nextViewController.email = self.email 
} 
+0

あなたの答えをありがとう!アニメーションが正しく機能するようになりました。しかし、私は電子メールが正しく送信されないという問題があります(ViewControllerが切り替えられていないため)。あなたはこの問題を解決する方法を知っていますか? –

+0

私は示唆したように 'nextViewController.email = self.email'を変更しましたか? – jvrmed

+0

はい、performSegue関数の前にあります。 –

関連する問題