如何使用 UIcollectionView 制作 prepareForSegue
How to make prepareForSegue with UIcollectionView
我对这段代码有疑问:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("showDetailsSegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetailsSegue" {
let detailsVC: DetailsViewController = segue.destinationViewController as! DetailsViewController
let indexPaths = self.collectionView.indexPathsForSelectedItems()
let indexPath = indexPaths[0] as! NSIndexPath
var thisCoupon = self.userCoupons[indexPath.row] as UserCoupons
detailsVC.userCoupon = self.userCoupons[indexPath.row]
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPath.row]
}
}
当我在集合视图中只有一项时,我无法转到 DetailsViewController。当我的项目很少时,我的 segue 会处理没有最后一项的项目。
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.userCoupons.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! StampsCollectionViewCell
let thisStamp = self.userCoupons[indexPath.row]
if thisStamp.couponImage != nil {
var image = thisStamp.couponImage
cell.stampImage.image = image
}
var day: NSString = (thisStamp.couponDate as NSString).stringByReplacingCharactersInRange(NSRange(location: 0, length: 6), withString: "")
var monthS: NSString = (thisStamp.couponDate as NSString).stringByReplacingCharactersInRange(NSRange(location: 0, length: 4), withString: "")
var month: NSString = monthS.stringByReplacingCharactersInRange(NSRange(location: 2, length: 2), withString: "")
var year: NSString = (thisStamp.couponDate as NSString).stringByReplacingCharactersInRange(NSRange(location: 4, length: 4), withString: "")
cell.stampDate.text = "\(day).\(month).\(year)"
return cell
}
以下代码应该适合您:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetailsSegue" {
let detailsVC = segue.destinationViewController as! DetailsViewController
let cell = sender as! StampsCollectionViewCell
let indexPaths = self.couponsCollectionView.indexPathForCell(cell)
var thisCoupon = self.userCoupons[indexPaths!.row] as UserCoupons
detailsVC.userCoupon = thisCoupon
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPaths!.row]
}
}
更新:请检查从服务器传入的数据是否正确,它可能会工作!
试试这个:
let cell = sender as StampsCollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
您的代码将是:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "showDetailsSegue" {
let detailsVC: DetailsViewController = segue.destinationViewController as! DetailsViewController
let cell = sender as StampsCollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
var thisCoupon = self.userCoupons[indexPath.row] as UserCoupons
detailsVC.userCoupon = thisCoupon
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPath.row]
}
}
希望它能奏效。
你可以试试这个:
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItemAtIndexPath(indexPath)
self.performSegueWithIdentifier("showDetailsSegue", sender: cell)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetailsSegue" {
let detailsVC: DetailsViewController = segue.destinationViewController as! DetailsViewController
let cell = sender as! StampsCollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
var thisCoupon = self.userCoupons[indexPath.row] as UserCoupons
detailsVC.userCoupon = thisCoupon
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPath.row]
}
}
我对这段代码有疑问:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("showDetailsSegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetailsSegue" {
let detailsVC: DetailsViewController = segue.destinationViewController as! DetailsViewController
let indexPaths = self.collectionView.indexPathsForSelectedItems()
let indexPath = indexPaths[0] as! NSIndexPath
var thisCoupon = self.userCoupons[indexPath.row] as UserCoupons
detailsVC.userCoupon = self.userCoupons[indexPath.row]
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPath.row]
}
}
当我在集合视图中只有一项时,我无法转到 DetailsViewController。当我的项目很少时,我的 segue 会处理没有最后一项的项目。
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.userCoupons.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! StampsCollectionViewCell
let thisStamp = self.userCoupons[indexPath.row]
if thisStamp.couponImage != nil {
var image = thisStamp.couponImage
cell.stampImage.image = image
}
var day: NSString = (thisStamp.couponDate as NSString).stringByReplacingCharactersInRange(NSRange(location: 0, length: 6), withString: "")
var monthS: NSString = (thisStamp.couponDate as NSString).stringByReplacingCharactersInRange(NSRange(location: 0, length: 4), withString: "")
var month: NSString = monthS.stringByReplacingCharactersInRange(NSRange(location: 2, length: 2), withString: "")
var year: NSString = (thisStamp.couponDate as NSString).stringByReplacingCharactersInRange(NSRange(location: 4, length: 4), withString: "")
cell.stampDate.text = "\(day).\(month).\(year)"
return cell
}
以下代码应该适合您:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetailsSegue" {
let detailsVC = segue.destinationViewController as! DetailsViewController
let cell = sender as! StampsCollectionViewCell
let indexPaths = self.couponsCollectionView.indexPathForCell(cell)
var thisCoupon = self.userCoupons[indexPaths!.row] as UserCoupons
detailsVC.userCoupon = thisCoupon
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPaths!.row]
}
}
更新:请检查从服务器传入的数据是否正确,它可能会工作!
试试这个:
let cell = sender as StampsCollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
您的代码将是:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "showDetailsSegue" {
let detailsVC: DetailsViewController = segue.destinationViewController as! DetailsViewController
let cell = sender as StampsCollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
var thisCoupon = self.userCoupons[indexPath.row] as UserCoupons
detailsVC.userCoupon = thisCoupon
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPath.row]
}
}
希望它能奏效。
你可以试试这个:
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItemAtIndexPath(indexPath)
self.performSegueWithIdentifier("showDetailsSegue", sender: cell)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetailsSegue" {
let detailsVC: DetailsViewController = segue.destinationViewController as! DetailsViewController
let cell = sender as! StampsCollectionViewCell
let indexPath = self.collectionView!.indexPathForCell(cell)
var thisCoupon = self.userCoupons[indexPath.row] as UserCoupons
detailsVC.userCoupon = thisCoupon
detailsVC.pinArray = self.pinArray
detailsVC.userStamp = self.userStamps[indexPath.row]
}
}