iOS开发:如何将CollectionView文本数据传递至ViewController并展示
问题描述
点击CollectionView中的图片后,需在跳转后的GalleryViewController中展示对应图片及自定义文本。尝试传递文本时出现CANNOT BE LABEL错误,需解决文本传递至UITextView的展示问题。
现有代码的核心问题
- 变量命名冲突:在
didSelectItemAt方法中,将实例化的GalleryViewController命名为ExploreViewController(与当前控制器同名),导致访问属性时出错。 - 重复页面跳转:连续调用两次
pushViewController,会触发重复跳转行为。 - 文本传递未关联对应数据:未从
textArr中取出对应索引的文本,传递给GalleryViewController的textDescription属性。
修正方案
1. 修改 ExploreViewController 的 didSelectItemAt 方法
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil) // 修正变量名,避免与当前控制器类名冲突 let galleryVC = mainStoryBoard.instantiateViewController(withIdentifier: "GalleryViewController") as! GalleryViewController // 安全传递选中的图片(避免UIImage初始化失败导致崩溃) if let targetImage = UIImage(named: imageGallery[indexPath.row]) { galleryVC.imageReceived = targetImage } // 传递对应索引的文本,同时判断索引是否在数组范围内 if indexPath.row < textArr.count { galleryVC.textDescription = textArr[indexPath.row] } // 仅执行一次页面跳转 self.navigationController?.pushViewController(galleryVC, animated: true) }
2. 确保 textArr 与 imageGallery 元素数量匹配
为避免数组越界,textArr的元素数量需和imageGallery一致,示例如下:
var textArr = [ "示例描述1","示例描述2","示例描述3","示例描述4","示例描述5","示例描述6", "示例描述7","示例描述8","示例描述9","示例描述10","示例描述11","示例描述12", "示例描述13","示例描述14","示例描述15","示例描述16","示例描述17","示例描述18", "示例描述19","示例描述20","示例描述21","示例描述22" ]
3. GalleryViewController 保持现有代码即可
当前代码已能正确接收并展示图片和文本,无需修改:
import UIKit class GalleryViewController: UIViewController{ var imageReceived = UIImage() var textDescription = "" @IBOutlet var selectedImage: UIImageView! @IBOutlet var imageDetail: UITextView! override func viewDidLoad() { super.viewDidLoad() selectedImage.image = imageReceived imageDetail.text = textDescription } }
内容的提问来源于stack exchange,提问作者N-A
相关产品推荐
相关产品推荐

