iOS 项目中 Main Feed 上的 ImageView 问题

问题描述 投票:0回答:0

所以基本上我在我的社交媒体应用程序项目中设置了一个功能性主提要,用户可以在其中创建帖子。我遇到的主要问题是虽然该功能确实有效,但它并没有发挥最大作用。

这里是一些关键信息:

Main Feed View Controller

上面的链接显示了我的主进给控制器的样子。我在用户可以查看帖子的地方设置了它,如果他们想自己制作,他们会按下左上角的按钮并被带到如下所示的 CameraViewController:

CameraViewController

在 CameraViewController 中,用户选择图像视图以选择他们想要发布的图像(这很好用),写下他们的标题,然后点击提交帖子以上传帖子。但是,当您尝试查看帖子时,它看起来像以下内容:

Post

出于某种原因,图片没有与帖子的其余部分一起显示。非常感谢有关如何解决此问题的帮助。

这是我的代码

MainFeedViewController

import UIKit
import Parse
import AlamofireImage
import MessageInputBar

class FeedViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MessageInputBarDelegate
{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        let post = posts[section]
        let comments = (post["comments"] as? [PFObject]) ?? []
               
        return comments.count + 2
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return posts.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let post = posts[indexPath.section]
        let comments = (post["comments"] as? [PFObject]) ?? []
                
                
        let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell") as! PostCell
                
        if indexPath.row == 0
        {
                
            let user = post["author"] as! PFUser
            cell.usernameLabel.text = user.username
                
            cell.captionLabel.text = post["caption"] as! String
                
            let imageFile = post["image"] as! PFFileObject
            let urlString = imageFile.url!
            let url = URL(string: urlString)!
                
            cell.postImageView.af_setImage(withURL: url)
                
            return cell
                
        }
            else if indexPath.row <= comments.count
            {
                let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell") as! CommentCell
                    
                let comment = comments[indexPath.row - 1]
                cell.commentLabel.text = comment["text"] as? String
                    
                let user = comment["author"] as! PFUser
                cell.nameLabel.text = user.username
                    
                return cell
            }
            else
              {
                let cell = tableView.dequeueReusableCell(withIdentifier: "AddCommentsCell")!
                return cell
               }
    }
    
    @IBOutlet weak var tableView: UITableView!
    let commentBar = MessageInputBar()
    var showsCommentBar = false
    var posts = [PFObject]()
    var selectedPost: PFObject!
    
    
    override func viewDidLoad() {
            super.viewDidLoad()
            
            commentBar.inputTextView.placeholder = "Add a comment..."
            commentBar.sendButton.title = "Post"
            commentBar.delegate = self
            
            tableView.delegate = self
            tableView.dataSource = self
            
            tableView.keyboardDismissMode = .interactive

            let center = NotificationCenter.default
            center.addObserver(self, selector: #selector(keyboardWillBeHidden(note:)), name: UIResponder.keyboardWillHideNotification, object: nil)
            // Do any additional setup after loading the view.
        }
        
        @objc func keyboardWillBeHidden(note: Notification)
        {
            commentBar.inputTextView.text = nil
            showsCommentBar = false
            becomeFirstResponder()
        }
        
        override var inputAccessoryView: UIView? {
            return commentBar
        }
        
        override var canBecomeFirstResponder: Bool {
            return showsCommentBar
        }
        
        func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
            // Create the comment
            let comment = PFObject(className: "Comments")
            comment["text"] = text
            comment["post"] = selectedPost
            comment["author"] = PFUser.current()!
            
            selectedPost.add(comment, forKey: "Comments")
            
            selectedPost.saveInBackground {(success, error) in
                if success
                {
                    print("Comment saved")
                }
                else
                {
                    print("Error saving comment")
                }
            }
            
            tableView.reloadData()
            
            //Clear and dismiss the input bar
                commentBar.inputTextView.text = nil
                showsCommentBar = false
                becomeFirstResponder()
                commentBar.inputTextView.resignFirstResponder()
        }
        
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            
            let query = PFQuery(className:"Posts")
            query.includeKeys(["author", "comments", "comments.author"])
            query.limit = 20
            
            query.findObjectsInBackground { (posts, error) in
                if posts != nil
                {
                    self.posts = posts!
                    self.tableView.reloadData()
                }
            }
        }
    
    // Allows user to log out of the application.
    @IBAction func onLogOut(_ sender: Any)
    {
        PFUser.logOut()
        
        let main = UIStoryboard(name: "Main", bundle: nil)
        let loginVC = main.instantiateViewController(withIdentifier: "LoginViewController")
        let delegate = self.view.window?.windowScene?.delegate as! SceneDelegate
        delegate.window?.rootViewController = loginVC
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
           let post = posts[indexPath.section]
           let comments = (post["Comments"] as? [PFObject]) ?? []
          
           if indexPath.row == comments.count + 1
           {
               showsCommentBar = true
               becomeFirstResponder()
               commentBar.inputTextView.becomeFirstResponder()
               
               selectedPost = post
           }
           
   }
}

这是我的代码

CameraViewController:

import UIKit
import AlamofireImage
import Parse

class CameraViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
{
    @IBOutlet weak var imageView: UIImageView!
    
    @IBOutlet weak var captionField: UITextField!
    
    
    @IBAction func onSubmitPostButton(_ sender: Any)
    {
        let post = PFObject(className: "Posts")
        
        post["caption"] = captionField.text!
        post["author"] = PFUser.current()!
        
        let imageData = imageView.image!.pngData()
        let file = PFFileObject(data: imageData!)
        
        post["image"] = file
        
        post.saveInBackground
        {
            (success, error) in
            if success
            {
                self.dismiss(animated: true, completion: nil)
                print("saved!")
            }
            else
            {
                print("Error: \(error?.localizedDescription)")
            }
        }
    }
    
    @IBAction func onCameraButton(_ sender: Any)
    {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.allowsEditing = true
        
       /* if UIImagePickerController.isSourceTypeAvailable(.camera)
        {
            picker.sourceType = .camera
        }
        else
        {
            picker.sourceType = .photoLibrary
        } */
        
        picker.sourceType = .photoLibrary
        
        present(picker, animated: true, completion: nil)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image = info[.editedImage] as! UIImage
        
        let size = CGSize(width: 300, height: 300)
        let scaledImage = image.af_imageScaled(to: size)
        
        imageView.image = scaledImage
        
        dismiss(animated: true, completion: nil)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        initializeHideKeyboard()

        // Do any additional setup after loading the view.
    }
    
    func initializeHideKeyboard()
    {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissMyKeyboard))
        view.addGestureRecognizer(tap)
    }
    
    @objc func dismissMyKeyboard()
    {
        view.endEditing(true)
    }
}

最后,

PostCell
CommentCell

import UIKit

class PostCell: UITableViewCell {
    
    
    @IBOutlet weak var usernameLabel: UILabel!
    @IBOutlet weak var captionLabel: UILabel!
    @IBOutlet weak var postImageView: UIImageView!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}
import UIKit

class CommentCell: UITableViewCell {
    
    
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var commentLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

再次感谢所有帮助!

ios swift xcode uiimageview imageview
© www.soinside.com 2019 - 2024. All rights reserved.