私はUITableViewController
とUITableViewCell
を動的に生成しています。各セルには、自分のサーバーから取り込まれたイメージで塗りつぶしているimageViewが含まれています。私はalamofire_images
を使っています。次のように私のコードでは、なりますどのように私は動的に生成されたUITableViewCellから画像を取得し、他のビューにsegueで渡すことができますか?
func tableView(testDetailsPanel: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = testDetailsPanel.dequeueReusableCellWithIdentifier("cell") as! TestDetailsCell
let test:SingleTest = self.items[indexPath.row] as! SingleTest
if(test.photo != "") {
cell.myPhoto.af_setImageWithURL(NSURL(string: test.photo)!)
} else {
cell.myPhoto.image = UIImage(named: "clusterLarge")
}
return cell
}
は、私はテーブルを表示しながら、私はイメージをダウンロードしていますから、(各セルをクリックすることを通じてアクセス可能である)他の画面上で再度ダウンロードする必要がないと思いました。
私の考えは、特定のセルから別の画面に画像をsegueで渡すことでした。しかし、問題は、方法prepareForSegue
から、ユーザーがクリックした特定のセルにアクセスすることができないということです。だから私の他の選択肢は、プロトコルを使用することでした。
protocol HandlePhoto: class {
func setUpBackgroundPhoto(miniature: UIImage)
}
、その後、私のネイティブクラスで私は
didSelectRowAtIndexPath
方法でそれを使用したい:私は非常にシンプルなものを作成し
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let test:SingleTest = self.items[indexPath.row] as! SingleTest
let cell = testDetailsPanel.dequeueReusableCellWithIdentifier("cell") as! TestDetailsCell
if(test.photo != "") {
handlePhoto.setUpBackgroundPhoto(cell.testPhoto.image!)
self.performSegueWithIdentifier("testPhotoDetailsSegue", sender: test)
}
} else {
self.performSegueWithIdentifier("testTextDetailsSegue", sender: test)
}
}
しかし、この行:
handlePhoto.setUpBackgroundPhoto(cell.testPhoto.image!)
がエラーをスローします。
fatal error: unexpectedly found nil while unwrapping an Optional value
私の最終的な質問は、ユーザーが選択した特定のセルの写真にアクセスして、それを他のビューに渡すにはどうすればよいのですか(2回目にダウンロードすることなく)。
あなたはそうする必要はありません。イメージはデバイスにキャッシュされ、次の画面ではダウンロードされません。 –
@ Mr.UBので、次の画面で「myImage.af_setImageWithURL(NSURL(string:test.photo)!)」を実行すると、それを再度ダウンロードすることはなく、すぐにそこに表示されます。どのイメージがキャッシュから表示されるはずですか? – user3766930