ios - 关闭以前的 VC 后仅重新加载新数据
问题描述
所以我有一个 Photo VC,我可以在其中发布如下所述的图像和标题:
@IBAction func postPressed(_ sender: Any) {
self.view.isUserInteractionEnabled = false
if imageOutlet.imageView?.image != UIImage(named: "plus_photo") && postImageTextField.text.count >= 5 && postImageTextField.text != "Write a caption..." {
var userProfileImageData = Data()
let query = PFQuery(className: "_User")
query.whereKey("username", equalTo: PFUser.current()?.username)
query.findObjectsInBackground(block: { (objects: [PFObject]?,error: Error?) in
if let objects = objects {
for object in objects {
let userImageFile = object["profilePic"] as? PFFileObject
userImageFile?.getDataInBackground(block: { (userProfileImageData1: Data?, error: Error?) in
if error == nil {
userProfileImageData = userProfileImageData1!
let currentDateTime = Date()
let formatter = DateFormatter()
formatter.timeStyle = .short
formatter.dateStyle = .none
let captionData = self.postImageTextField.text
let userPhoto = PFObject(className: "PicPost")
let imageData = self.imageOutlet.imageView?.image?.jpegData(compressionQuality: 0.1)!
let imageFile = PFFileObject(name: "image.png", data: imageData!)
let imageFile2 = PFFileObject(name: "image.png", data: userProfileImageData)
userPhoto["ProfilePhoto"] = imageFile2
userPhoto["Bar"] = self.barText
userPhoto["ImageFile"] = imageFile
userPhoto["UserCaption"] = captionData
userPhoto["UserLikes"] = 0
userPhoto["UserTime"] = (formatter.string(from: currentDateTime))
userPhoto["Username"] = PFUser.current()?.username
userPhoto.saveInBackground { (success, error) in
if success {
self.postImageTextField.resignFirstResponder()
//Go back to original VC
self.presentingViewController?.dismiss(animated: true, completion: nil)
} else {
print(error)
self.view.isUserInteractionEnabled = true
}
}
} else {
print(error)
}
})
}
}
})
}
}
我使用以下行解雇了这个 VC:
self.presentingViewController?.dismiss(animated: true, completion: nil)
这个新的 tableView VC 已经加载了数据:
func getPicData() {
let query = PFQuery(className: "PicPost")
query.whereKey("Bar", equalTo: BarText!)
query.addDescendingOrder("createdAt")
query.limit = picLimit
query.findObjectsInBackground(block: { (objects: [PFObject]?,error: Error?) in
if let objects = objects {
for object in objects {
self.picsLoaded = true
let ImageFile = object["ImageFile"] as? PFFileObject
let urlString = ImageFile?.url as! String
if let url = URL(string: urlString) {
let data = try? Data(contentsOf: url)
if let imageData = data {
self.picPostPicUrlArray.append(urlString as NSString)
self.picPostPicImageCache.setObject(UIImage(data:imageData)!,forKey: urlString as NSString)
}
}
let ProfileImageFile = object["ProfilePhoto"] as? PFFileObject
let urlString2 = ProfileImageFile?.url as! String
if let url2 = URL(string: urlString2) {
let data = try? Data(contentsOf: url2)
if let imageData = data {
self.picPostProPicUrlArray.append(urlString2 as NSString)
self.picPostProPicImageCache.setObject(UIImage(data: imageData)!, forKey: urlString2 as NSString)
}
}
if object["UserLikes"] != nil && object["Username"] != nil && object["UserTime"] != nil {
self.picLikeArray.append(object["UserLikes"] as! Int)
self.picUsernameArray.append(object["Username"] as! String)
self.picTimeArray.append(object["UserTime"] as! String)
self.picObjectIdArray.append(object.objectId!)
self.picCaptionArray.append(object["UserCaption"] as! String)
}
}
self.Reload()
}
})
}
如您所见,函数 getPicData() 已经从 parse.com 加载了所有数据。它存储在各种数组中。
我想做的是只加载新数据并将其添加到当前的tableView。我尝试做的是从 PhotoVC 到 tableView VC。然后,新的 segue 将重新加载所有数据()。不幸的是,这对我的记忆力非常不利。
我需要解决的两个问题:
1) 仅加载新数据并将其加载到当前表视图 2) 关闭 tableView VC 以返回主屏幕。现在它被解散到它刚刚来自的那个,也就是后风投。
谢谢
解决方案
对于将新数据添加到现有可用数组的第一个问题。您可以在 PhotoVC 中使用委托方法将新发布的对象传递给您以前的控制器,即在您的情况下为 tableView VC 。这是两个类之间委托的代码片段。
protocol PhotoVCdelegate : class{
func postAdded(item : PFObject)
}
class PhotoVC{
weak var delegate : PhotoVCdelegate?
@IBAction func postPressed(_ sender: Any) {
self.view.isUserInteractionEnabled = false
if imageOutlet.imageView?.image != UIImage(named: "plus_photo") && postImageTextField.text.count >= 5 && postImageTextField.text != "Write a caption..." {
var userProfileImageData = Data()
let query = PFQuery(className: "_User")
query.whereKey("username", equalTo: PFUser.current()?.username)
query.findObjectsInBackground(block: { (objects: [PFObject]?,error: Error?) in
if let objects = objects {
for object in objects {
let userImageFile = object["profilePic"] as? PFFileObject
userImageFile?.getDataInBackground(block: { (userProfileImageData1: Data?, error: Error?) in
if error == nil {
userProfileImageData = userProfileImageData1!
let currentDateTime = Date()
let formatter = DateFormatter()
formatter.timeStyle = .short
formatter.dateStyle = .none
let captionData = self.postImageTextField.text
let userPhoto = PFObject(className: "PicPost")
let imageData = self.imageOutlet.imageView?.image?.jpegData(compressionQuality: 0.1)!
let imageFile = PFFileObject(name: "image.png", data: imageData!)
let imageFile2 = PFFileObject(name: "image.png", data: userProfileImageData)
userPhoto["ProfilePhoto"] = imageFile2
userPhoto["Bar"] = self.barText
userPhoto["ImageFile"] = imageFile
userPhoto["UserCaption"] = captionData
userPhoto["UserLikes"] = 0
userPhoto["UserTime"] = (formatter.string(from: currentDateTime))
userPhoto["Username"] = PFUser.current()?.username
userPhoto.saveInBackground { (success, error) in
if success {
self.postImageTextField.resignFirstResponder()
//Go back to original VC
//HERE you can pass this information to your controller
self.delegate?.postAdded(item : userPhoto)
self.presentingViewController?.dismiss(animated: true, completion: nil)
} else {
print(error)
self.view.isUserInteractionEnabled = true
}
}
} else {
print(error)
}
})
}
}
})
}
}
在您的 TableViewVC.swift 中,假设您具有在按钮单击时呈现控制器的功能。
class TableViewVC{
@IBAction func createPostBtnPressed(_ sender: Any) {
if let vc = self.storyboard?.instantiateViewController(withIdentifier:"PhotoVC") as? PhotoVC{
vc.delegate = self
self.presentViewController(vc, animated: true, completion: nil)
}
}
}
当您成功发布数据时,将调用 PhotoVC 的委托方法。
extension TableViewVC : PhotoVCdelegate{
func postAdded(item : PFObject){
// append required value from item object into your arrays and reload tableview .
}
}
希望这可以帮助 !
推荐阅读
- android - 如何在android中制作通知声音列表?
- nim-lang - Nim:从过程返回表
- strapi - 如何在 Strapi 中处理自定义数据创建
- php - 在注册表单中添加的额外字段将保存在 wp_users 表中,而不是 wp_usermeta 表(WooCommerce)
- r - 如何在 R 中正确使用 read.table 与该数据库?
- typescript - 如何传递嵌套类以输入@ApiOkResponse 或创建适当的自定义装饰器?
- sql - 为什么不能删除角色,因为某些对象依赖于它
- python - 为什么 send_keys() 方法不起作用。`元素不可交互`
- python - Python - 将特定文件从子文件夹复制到目标,从文本文件中获取文件名
- android - NestedScrolling 不适用于 gridView