ios - 委托(delegate)函数未在按钮单击时被调用

标签 ios swift xcode

在 Swift 中,尽管定义正确,但 xcode 无法调用委托(delegate)函数。 用它来获取事件单元格的值。

按钮声明文件

import UIKit

protocol CellDelegate : class {

    func didClickPlayButton(_ sender: VideoTableViewCell)
}

class VideoTableViewCell: UITableViewCell {

    @IBOutlet weak var cellView: UIView!
    @IBOutlet weak var VideoThumbnail : UIImageView!
    @IBOutlet weak var VideoName: UILabel!
    @IBOutlet weak var uploadDate: UILabel!

    @IBOutlet weak var playButton: UIButton!

     weak var Delegate: CellDelegate?

    @IBAction func pressedPlay(_ sender: UIButton) {

        Delegate?.didClickPlayButton(self)
        print("PLAY")
    }

}

函数声明文件

导入 UIKit

导入 FirebaseAuth

导入 Firebase 数据库

导入 AVFoundation

导入 AVKit

VideoVC 类:UIViewController、UITableViewDelegate、UITableViewDataSource、CellDelegate {

let avPlayerViewController = AVPlayerViewController()
var avPlayer : AVPlayer?

func didClickPlayButton(_ sender : VideoTableViewCell) {

    let indexPath = self.tableview.indexPath(for: sender)

    print("Play Button Pressed")

    if let index = indexPath?.row
    {
        let movieUrl : NSURL? = NSURL(string : posts[(index)].noticeURL)

        if let url = movieUrl
        {
            self.avPlayer = AVPlayer(url: url as URL)
            self.avPlayerViewController.player = self.avPlayer
            self.present(self.avPlayerViewController, animated: true, completion: {
            self.avPlayerViewController.player?.play()
            })
        }
    }
}

@IBOutlet weak var tableview: UITableView!

var posts = [Post]()


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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableview.dequeueReusableCell(withIdentifier: "Videocell") as! VideoTableViewCell
    cell.selectionStyle = .none
    cell.uploadDate?.text = posts[indexPath.row].uploadDate
    cell.VideoName?.text = posts[indexPath.row].noticeName
    cell.VideoThumbnail?.image = thumbnail(sourceURL: (URL(string : posts[indexPath.row].noticeURL)!))
    return cell
}



override func viewDidLoad() {
    super.viewDidLoad()
    tableview.dataSource = self
    self.tableview.rowHeight = 300
      loadposts()
}

func loadposts()
{
    Database.database().reference().child("Videos").observe(.childAdded) { (snapshot : DataSnapshot) in
        if let dict = snapshot.value as? [String : Any]
        {
            let uploaddate = dict["Date"] as! String
            let noticename = dict["Name"] as! String
            let ImageUrl = dict["URL"] as! String
            let post = Post(uploadedDate: uploaddate, nameofnotice: noticename, URLofnotice: ImageUrl)

            self.posts.append(post)
            self.tableview.reloadData()
        }
    }
}
func thumbnail(sourceURL:URL) -> UIImage {
    let asset = AVAsset(url: sourceURL)
    let imageGenerator = AVAssetImageGenerator(asset: asset)
    let time = CMTime(seconds: 1, preferredTimescale: 1)
    let imageRef = try? imageGenerator.copyCGImage(at: time, actualTime: nil)
    if imageRef != nil
    {
        let uiimage = UIImage(cgImage: imageRef!)
        return uiimage
    }
    else
    {
        return #imageLiteral(resourceName: "BG_DDIT")
    }
}

最佳答案

cellForRow

cell.Delegate = self

并在 PdfVC 中实现委托(delegate)方法

func didClickPlayButton(_ sender: VideoTableViewCell){----}

关于ios - 委托(delegate)函数未在按钮单击时被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49465260/

相关文章:

json - 为什么我不能使用 codable 解码这个 json 数据?

ios - 如何在uicollectionview中放大单元格的内容

ios - App Delegate的应用程序:didReceiveLocalNotification: not called

ios - 字符串过滤器的核心数据数组

swift - 如何根据 SwiftUI 中的 @State 更改导航 View 的导航 View 样式?

ios - 如何在导航栏上使用图像 Logo 而不是标题

ios - 获取内存不足崩溃的通知

ios - 将指数数转换为 nsnumber

swift - 将 `[URLQueryItem]` 减少为 `[String: Any]`

ios - 在 iOS 模拟器上启动应用程序(waxsim 不再工作)