2017-01-18 20 views
0

UITableViewのセルが押されると、クリックされた最初のセルで以前に使用されていたのと同じ画像とラベルを持つ新しいViewControllerが開きます。ここでUITableViewCellが押されたときのUIViewController

は私の細胞である:ここでは My Cells 私が使用しています配列です。ここで

let alligator:NSArray = ["American Alligator","American Crocodile","Mugger Crocodile","Saltwater Crocodile"] 

numberOfRowsInSection and cellForRowAt次のとおりです。ここで

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


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell4 = tableView.dequeueReusableCell(withIdentifier: "cell4", for: indexPath) as! AlligatorViewCell 
    cell4.alligatorImage.image = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg") 
    cell4.alligatorLabel.text = alligator[indexPath.row] as? String 
    return(cell4) 
} 

は、詳細ビューコントローラのための私の店です。

@IBOutlet var detailImage: UIImageView! @IBOutlet var detailLabel: UILabel!

そして、ここではdidSelectRowAt

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    detailImage.image = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")! 
    detailLabel.text = alligator[indexPath.row] as? String 

ある問題は、私はあなたが呼び出すときdetailImageが存在しないため、あなたのエラーが発生していると信じて、私はセルを押したときに、私はエラーを取得することfatal error: Unexpectedly found nil while Unwrapping Optional

+0

は、問題は何ですか?あなたは別のビューコントロールにセグエイティングを試みたことがありますか? SOにはこれを行う方法に関する記事がたくさんあります。私はそれらを見てみることをお勧めします。 –

+0

セグ部がうまくいきます。ラベルと画像に問題があるだけです。 – Pannu

+0

おそらく、存在しない画像を呼び出している可能性があります。 UIImage.initの文字列がアップロードしたファイル名と一致することを確認してください。 –

答えて

1

ですそれ。

これらのコンセントはベースビューコントローラにありますが、詳細ビューコントローラのオブジェクトを参照していますが、これは許可されていません。したがって、あなたがそれらを試して呼び出すと、ゼロの値を与えるものを渡すことはありません。

したがって、初期化されているUIImageについてはありません。

detailViewControllerクラス内でIBOutletを作成してから、セルの値をprepareForSegue funcを通じてこれらのアウトレットに渡す必要があります。

ご質問がありましたら教えてください。

編集

のは、あなたの詳細ビューコントローラは、その後、あなたが

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let controller = segue.destination as! UIViewController //your detail controller 
    controller.detailImage = myImage //where myImage is a property of your base view controller 
} 

編集

ます(お使いのベースのViewControllerで)このような何かを行うことができdetailImage性を有しているとしましょう以前に試したようにセルがタップされているときにビューコントローラのmyImageプロパティを設定できます。次に、myImageをprepareForSegue関数のdetailImageに設定することができます。したがって、このような何か:

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    myImage = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")! 
    ... 

編集

あなたはこのようmyImageを使用する必要があります。

var myImage: UIImage? 
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     myImage = UIImage.init(named: alligator[indexPath.row] as! String + ".jpg")! 
     ... 
+0

セグ機能の準備で値を渡す方法を教えてください – Pannu

+0

@Pannu確かに、私の更新された答えをチェックしてください。 –

+0

cellForRowAtで使用されるプロパティalligatorImageがAlligatorViewCellと呼ばれる別のクラスに固有であるため、myImageの代わりに何をすべきか分かりません。 – Pannu

関連する問題