gpt4 book ai didi

ios - Firebase - iO : How to pass data from Tableview to DetailsView?

转载 作者:行者123 更新时间:2023-11-30 12:42:33 25 4
gpt4 key购买 nike

我有一个“Feed” Controller ,它通过 Firebase 中的表格(标题和图像)列出多个帖子。

enter image description here

按一下按钮,它就会进入“提要详细信息” Controller ,我希望在其中显示先前单击的帖子(父级)中的数据(标题图像和标题)。 (见截图2)

enter image description here enter image description here

目前,在单击时,我仅获得静态信息,没有从 Firebase 获取任何信息。然而,它们都在主屏幕中被正确调用。所以问题是当它转向“DetailsController”时

如何从之前点击的项目中获取详细信息?

目前这是我的提要 Controller :

//
// Feed.swift
// MobileAppDemo
//
// Created by Mikko Hilpinen on 31.10.2016.
// Copyright © 2016 Mikkomario. All rights reserved.
//

import UIKit
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage
import SwiftKeychainWrapper
import SwiftyJSON

class FeedVC: UIViewController, UITableViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate
{
@IBOutlet weak var addImageView: UIImageView!
@IBOutlet weak var feedTableView: UITableView!
@IBOutlet weak var titleInputView: InputTextView!
@IBOutlet weak var linkbutton: UIButton!

@IBOutlet weak var captionInputView: InputTextView!


private var posts = [Post]()
private var imagePicker = UIImagePickerController()
private var imageSelected = false

private var readPosts: ObserveTask?

override func viewDidLoad()
{
super.viewDidLoad()

imagePicker.delegate = self
imagePicker.allowsEditing = true

feedTableView.dataSource = self

feedTableView.rowHeight = UITableViewAutomaticDimension
feedTableView.estimatedRowHeight = 320

readPosts = Post.observeList(from: Post.parentReference.queryOrdered(byChild: Post.PROPERTY_CREATED))
{
posts in

self.posts = posts.reversed()
self.feedTableView.reloadData()
}



}

func numberOfSections(in tableView: UITableView) -> Int
{
return 1
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell


// here you need to add
{


if let cell = tableView.dequeueReusableCell(withIdentifier: "MessageCell", for: indexPath) as? MessageCell
{

let post = posts[indexPath.row]
cell.configureCell(tableView: tableView, post: post)
cell.linkbutton.tag = indexPath.row
cell.linkbutton.addTarget(self, action: #selector(FeedVC.toFeedDetailAction(_:)), for: .touchUpInside)
return cell

}
else
{
fatalError()
}
}

func toFeedDetailAction(_ sender: UIButton) {

let FeedDetailsController = self.storyboard?.instantiateViewController(withIdentifier: "FeedDetailsController") as! FeedDetailsController
FeedDetailsController.post = posts[sender.tag]
self.navigationController?.pushViewController(FeedDetailsController, animated: true)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
if let image = info[UIImagePickerControllerEditedImage] as? UIImage
{
addImageView.image = image

imageSelected = true
}
picker.dismiss(animated: true, completion: nil)
}

@IBAction func selectImagePressed(_ sender: AnyObject)
{
present(imagePicker, animated: true, completion: nil)
}

@IBAction func postButtonPressed(_ sender: AnyObject)
{
guard let caption = captionInputView.text, !caption.isEmpty else
{
// TODO: Inform the user
print("POST: Caption must be entered")
return
}

guard let title = titleInputView.text, !title.isEmpty else
{
// TODO: Inform the user
print("POST: title must be entered")
return
}

guard let image = addImageView.image, imageSelected else
{
print("POST: Image must be selected")
return
}

guard let currentUserId = User.currentUserId else
{
print("POST: Can't post before logging in")
return
}

imageSelected = false
addImageView.image = UIImage(named: "add-image")
captionInputView.text = nil
titleInputView.text = nil

// Uploads the image
if let imageData = UIImageJPEGRepresentation(image, 0.2)
{
let imageUid = NSUUID().uuidString
let metadata = FIRStorageMetadata()
metadata.contentType = "image/jpeg"

Storage.REF_POST_IMAGES.child(imageUid).put(imageData, metadata: metadata)
{
(metadata, error) in

if let error = error
{
print("STORAGE: Failed to upload image to storage \(error)")
}

if let downloadURL = metadata?.downloadURL()?.absoluteString
{
// Caches the image for faster display
Storage.imageCache.setObject(image, forKey: downloadURL as NSString)

print("STORAGE: Successfully uploaded image to storage")
_ = Post.post(caption: caption, title: title, imageUrl: downloadURL, creatorId: currentUserId)
}
}
}
}

@IBAction func signOutButtonPressed(_ sender: AnyObject)
{
// Doesn't listen to posts anymore
readPosts?.stop()

try! FIRAuth.auth()?.signOut()
User.currentUserId = nil
dismiss(animated: true, completion: nil)
}
}

以及我的 Feed 详细信息:

//
// FeedDetails.swift
// MobileAppDemo
//
// Created by Mikko Hilpinen on 31.10.2016.
// Copyright © 2016 Mikkomario. All rights reserved.
//

import UIKit
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage
import SwiftKeychainWrapper
import SwiftyJSON

class FeedDetailsController: UIViewController, UITableViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate
{
@IBOutlet weak var addImageView: UIImageView!
@IBOutlet weak var feedTableView: UITableView!
@IBOutlet weak var titleInputView: InputTextView!
@IBOutlet weak var linkbutton: UIButton!

@IBOutlet weak var captionInputView: InputTextView!

var post: Post!

private var posts = [Post]()
private var imagePicker = UIImagePickerController()
private var imageSelected = false

private var readPosts: ObserveTask?

override func viewDidLoad()
{
super.viewDidLoad()

imagePicker.delegate = self
imagePicker.allowsEditing = true


readPosts = Post.observeList(from: Post.parentReference.queryOrdered(byChild: Post.PROPERTY_CREATED))
{
posts in

self.posts = posts.reversed()
}



}

func numberOfSections(in tableView: UITableView) -> Int
{
return 1
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell


// here you need to add
{


if let cell = tableView.dequeueReusableCell(withIdentifier: "MessageCell", for: indexPath) as? MessageCell
{

let post = posts[indexPath.row]
cell.configureCell(tableView: tableView, post: post)
cell.linkbutton.tag = indexPath.row
cell.linkbutton.addTarget(self, action: #selector(FeedVC.toFeedDetailAction(_:)), for: .touchUpInside)
return cell

}
else
{
fatalError()
}
}


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
if let image = info[UIImagePickerControllerEditedImage] as? UIImage
{
addImageView.image = image

imageSelected = true
}
picker.dismiss(animated: true, completion: nil)
}

@IBAction func selectImagePressed(_ sender: AnyObject)
{
present(imagePicker, animated: true, completion: nil)
}

@IBAction func postButtonPressed(_ sender: AnyObject)
{
guard let caption = captionInputView.text, !caption.isEmpty else
{
// TODO: Inform the user
print("POST: Caption must be entered")
return
}

guard let title = titleInputView.text, !title.isEmpty else
{
// TODO: Inform the user
print("POST: title must be entered")
return
}

guard let image = addImageView.image, imageSelected else
{
print("POST: Image must be selected")
return
}

guard let currentUserId = User.currentUserId else
{
print("POST: Can't post before logging in")
return
}

imageSelected = false
addImageView.image = UIImage(named: "add-image")
captionInputView.text = nil
titleInputView.text = nil

// Uploads the image
if let imageData = UIImageJPEGRepresentation(image, 0.2)
{
let imageUid = NSUUID().uuidString
let metadata = FIRStorageMetadata()
metadata.contentType = "image/jpeg"

Storage.REF_POST_IMAGES.child(imageUid).put(imageData, metadata: metadata)
{
(metadata, error) in

if let error = error
{
print("STORAGE: Failed to upload image to storage \(error)")
}

if let downloadURL = metadata?.downloadURL()?.absoluteString
{
// Caches the image for faster display
Storage.imageCache.setObject(image, forKey: downloadURL as NSString)

print("STORAGE: Successfully uploaded image to storage")
_ = Post.post(caption: caption, title: title, imageUrl: downloadURL, creatorId: currentUserId)
}
}
}
}

@IBAction func signOutButtonPressed(_ sender: AnyObject)
{
// Doesn't listen to posts anymore
readPosts?.stop()

try! FIRAuth.auth()?.signOut()
User.currentUserId = nil
dismiss(animated: true, completion: nil)
}
}

最佳答案

您需要在 TableView (UITableViewDelegate 方法)中实现 prepare(for:sender:) 并将需要显示的数据添加到详细 View Controller 那里。

关于ios - Firebase - iO : How to pass data from Tableview to DetailsView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42072549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com