2017-08-21 36 views
0

我在iOS开发初学者,我一直在使用中实现以下屏幕UICollectionView:斯威夫特3个值传递给控制器​​上UICollectionViewCell按钮点击

enter image description here

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的图标)我想打开新的LeaderBoard控制器,并通过matchId这是classEvent.id

如何将值传递给新控制器?什么是最好的方式来做到这一点。

+0

请检查我的答案 –

+0

请参考这两个环节:https://stackoverflow.com/questions/31075116/passing-data-between-two-viewcontrollers-delegate-swift和https://stackoverflow.com/questions/5210535/passing-data-between-view-controllers – Amit

回答

2

您可以通过赛格瑞通过匹配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 
     } 
} 
    } 
+0

@IBAction func leaderboardButton(_ sender:UIButton){ self.performSegueWithIdentifier(“leaderboardSegue”,sender:self) } on leaderboardButton is showing error value of type' EventCell'没有成员'performSegueWithIdentifier' –

+0

,因为它是一个控制器方法,请将此方法添加到您的控制器 –

+0

prepareForSegue函数呢?当你调用self.performSegueWithIdentifier(“leaderboardSegue”,sender:self)时,在EventCell –

-1

三个简单步骤获得ü想什么:

  1. 做一个BaseViewController类的UIViewController的子类。这个类将是你项目中UiViewcontroller的替代,这意味着在创建任何ViewController时,BaseViewController将是父类。

  2. 在BaseViewController.e.g-中声明一个变量var数据:任何?

  3. 然后,当从视图控制器移动到另一个视图控制器时,只需将任何类型的数据分配给在BaseViewController中声明的变量即可。 而在你的新视图控制器的任何生命周期方法中,你将使用self.data获得这些数据。