我有一个collectionview,希望让用户点击一个图像,然后将其带到另一个具有该图像但更大的视图控制器。问题是图像没有加载到新的视图控制器上。我不确定问题出在哪里。如果有人能帮我,我将不胜感激。谢谢
可变图像:
var images = [UserImages]()
didSelectItemAt集合视图:
func collectionView(_ imageCollection: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController
vc?.name = images[indexPath.row] // Issue: 'Cannot assign value of type 'UserImages' to type 'String'
self.navigationController?.pushViewController(vc!, animated: true)
}
DetailViewController:
class DetailViewController: UIViewController {
@IBOutlet weak var img: UIImageView!
var name = ""
var dbRef: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
dbRef = Database.database().reference().child("users/(Auth.auth().currentUser!.uid)/Images/("name")")
loadDB()
}
func loadDB() {
dbRef.observe(DataEventType.value, with: { (snapshot) in
var newImages = [UserImages]()
for UserImagesSnapshot in snapshot.children {
let UserImagesObject = UserImages(snapshot: UserImagesSnapshot as! DataSnapshot)
newImages.append(UserImagesObject)
}
DispatchQueue.main.async {
self.img.image = UIImage(named: self.name)
}
})
}
}
UserImages(用于从firebase实时数据库中提取图像URL(
struct UserImages {
let key: String!
let url: String!
let itemsRef: DatabaseReference!
init (url:String, key:String) {
self.key = key
self.url = url
self.itemsRef = nil
}
init(snapshot: DataSnapshot) {
key = snapshot.key
itemsRef = snapshot.ref
url = snapshot.value as? String
}
}
使用
vc?.name = images[indexPath.row].url
并使用SDWebImage 从服务器加载图像