【Swift】画面遷移時の値・受け渡し方
SwiftでViewControllerよりAPIで取得した画像をButtonでLikeなのかButなのかを押下しLikeが押された時だけLike押下時の画像を保存
TabuleViewのCellにviewcontrollerでLike押下時に保存した画像を画面遷移させたいのですが上手く画像が反映されない
発生している問題・エラーメッセージ
@IBAction func goodButton(_ sender: Any) { count = count + 1 print(count) LikeImage = KensakuImage //←の後なんて記述すれば上手くLikeImageに押下時の画像が入るのか
遷移元のソースコード
import UIKit import Alamofire import SwiftyJSON import SDWebImage import Photos class ViewController: UIViewController { @IBOutlet weak var serchTextField: UITextField! @IBOutlet weak var KensakuImage: UIImageView! var count = 0 var LikeImage = [UIImage]() override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.isNavigationBarHidden = true } //検索キーワードの値を元に画像を引っ張ってくる //pixabay.com func getImages(keyword:String){ //APIKEY 9848333-b62d95ad945f6aae7e4f88e49 let url = "https://pixabay.com/api/?key=19848333-b62d95ad945f6aae7e4f88e49&q=(keyword)" //alamofireを使ってhttpリクエストを投げる AF.request(url, method:.get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (response) in switch response.result { case.success: let json:JSON = JSON(response.data as Any) var imageString = json["hits"][self.count]["webformatURL"].string if imageString == nil{ imageString = json["hits"][0]["webformatURL"].string self.KensakuImage.sd_setImage(with: URL(string: imageString!), completed: nil) }else{ self.KensakuImage.sd_setImage(with: URL(string: imageString!), completed: nil) } case.failure(let error): print(error) } } } @IBAction func serchButton(_ sender: Any) { self.count = 0 if serchTextField.text == ""{ getImages(keyword: "funny") }else{ getImages(keyword:serchTextField.text!) } } @IBAction func goodButton(_ sender: Any) { count = count + 1 print(count) LikeImage = KensakuImage //←の後なんて記述すれば上手くLikeImageに押下時の画像が入るのか // selectimages1.append() if count == 10 { // 10回押された時に遷移させる self.performSegue(withIdentifier: "nextVC", sender: nil) } if serchTextField.text == ""{ getImages(keyword: "funny") }else{ getImages(keyword:serchTextField.text!) } } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "nextVC"{ // segue.destination = 遷移先 // 遷移先 = GoodViewController let goodView = segue.destination as? GoodViewController // GoodViewControllerの中のselectimages print(KensakuImage) goodView?.selectimages = KensakuImage.image! } } @IBAction func badButton(_ sender: Any) { count = count + 1 if serchTextField.text == ""{ getImages(keyword: "funny") }else{ getImages(keyword:serchTextField.text!) } } } ```遷移先
import UIKit
class GoodViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView! var selectimages = UIImage() override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self print(selectimages) // Do any additional setup after loading the view. } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 390 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) let imageView = cell.contentView.viewWithTag(1) as! UIImageView imageView.image = selectimages return cell } @IBAction func backButton(_ sender: Any) { dismiss(animated: true, completion: nil) }
}
### 試したこと var LikeImage = [UIImage]()の画像が入る配列を作り ボタンが10回タップの時だけ入るようにしたかったので @IBAction func goodButton(_ sender: Any) { count = count + 1 print(count) LikeImage = KensakuImage //←の後なんて記述すれば上手くLikeImageに押下時の画像が入るのか 調べて入力したりするも上手く行かない 調べては書き直したりしているのでコードがめちゃくちゃになっておりますが、暖かい目でご回答いただけると幸いです。 ### 補足情報(FW/ツールのバージョンなど) Xcode 12.5 ios 14.6 ここにより詳細な情報を記載してください。
GoodViewController の cellForRowAt で、imageView に画像をセットする必要があるのでは。
ご回答ありがとうございます
どのように記述すればよろしいでしょうかご教授いただけると幸いです。
imageView.image = selectimages[indexPath.row]
ありがとうございます。
記述は無事にできたのですが、やはり画像が渡らず画面遷移するだけでした...
あ、selectimages.append(contentsOf: selectimages ) ってことは、selectimages に selectimages の中身を追加している (つまり配列の内容が 2 倍になる) のですが、もともと selectimages は空なので、2 倍にしても空のままですね…。
あっそうなんですね、すみません。
ぐちゃぐちゃなコードで…
なるほど、勉強になります。
配列に画像の値を入れるにはここで記述するのは何が正解なのでしょうか…?
あなたの回答
tips
プレビュー