Ios Swift 3在UICollectionViewCell按钮上将值传递给控制器单击

Ios Swift 3在UICollectionViewCell按钮上将值传递给控制器单击,ios,swift3,uinavigationcontroller,uicollectionview,Ios,Swift3,Uinavigationcontroller,Uicollectionview,我是iOS开发的初学者,我使用UICollectionView实现了以下屏幕: CollectionViewCell文件代码为: import UIKit class EventCell: UICollectionViewCell{ var classEvent: Event? @IBOutlet weak var eventTitle: UILabel! @IBOutlet weak var eventTeams: UILabel! @IBOutlet weak var eventTi

我是iOS开发的初学者,我使用UICollectionView实现了以下屏幕:

CollectionViewCell文件代码为:

import UIKit

class EventCell: UICollectionViewCell{

var classEvent: Event?

@IBOutlet weak var eventTitle: UILabel!
@IBOutlet weak var eventTeams: UILabel!
@IBOutlet weak var eventTime: UILabel!
@IBOutlet weak var eventTeamOneImage: UIImageView!
@IBOutlet weak var eventTeamTwoImage: UIImageView!

@IBOutlet weak var leaderboardButton: UIButton!

var datasourceItem: Any?{
    didSet{
        guard let event = datasourceItem as? Event else { return }
        classEvent = event

        eventTitle.text = "Match \(event.matchNo) (\(event.matchStage))"
        eventTeams.text = "\(event.teamOne.nameAttr) vs \(event.teamTwo.nameAttr)"
        eventTime.text = "\(event.getEventLockTimeAsString())"
        eventTeamOneImage.loadImageUsingCache(withUrl: event.teamOne.flagPhoto)
        eventTeamTwoImage.loadImageUsingCache(withUrl: event.teamTwo.flagPhoto)
        leaderboardButton.addTarget(self, action: #selector(handleLeaderBoardClick), for: .touchUpInside)
    }
}

@IBAction func leagueButton(_ sender: Any) {
}

weak var delegate: HomeControllerDelegate?
func handleLeaderBoardClick() {
    if let matchId = classEvent?.id {
        print(matchId)
        delegate?.clickOnLeaderBoard(matchId: matchId)
    }
}   
 }
现在点击排行榜按钮(图标为1,2,3),我想打开新的排行榜控制器并传递matchId,即classEvent.id


如何将值传递给新控制器?最好的方法是什么。

您可以通过segue传递比赛Id:

在排行榜控制器中设置属性:

var matchId:Int?
在控制器之间设置一段并添加一个标识符: 单击排行榜按钮:

self.performSegueWithIdentifier("yourSegueIdentifier", sender: self)
添加segue方法:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    if segue,identifier == "yourSegueIdentifier" {
        let destinationVC = segue.destinationViewController as LeaderbardController
        destinationVC.matchId = classEvent.id
        }
}
    }

三个简单的步骤来获得你想要的:

  • 使BaseViewController类成为UiViewController的子类。该类将是项目中UiViewcontroller的替代类,这意味着在创建任何viewcontroller时,BaseViewController将是父类

  • 在BaseViewController中声明一个变量。例如-var数据:有吗

  • 然后,在从一个viewcontroller移动到另一个viewcontroller时,只需将任何类型的数据分配给BaseViewController中声明的变量。 在新viewcontroller的任何生命周期方法中,您都将使用self.data获取该数据


  • 请检查我的回答请参考这两个链接:@IBAction func leaderboardButton(uSender:UIButton){self.performsgueWithIdentifier(“leaderboardSegue”,sender:self)}在leaderboardButton上显示类型为“EventCell”的错误值没有成员“performsgueWithIdentifier”,因为它是一个控制器方法,请将此方法添加到控制器中关于prepareForSegue函数的内容是什么?classEvent是在EventCell中定义的。当您调用self.PerformsgueWithIdentifier(“排行榜segue”,发件人:self)时,然后调用prepare for segue,它也是view controller方法。。在视图控制器中定义它是我在视图控制器中定义的方法,但是如何获取classEvent.id,因为我在视图控制器中没有访问classEvent的权限