在 Cell 外获取 CollectionViewCell 的 IndexPath
Get IndexPath of CollectionViewCell outside of Cell
首先我是swift的新手,所以要温柔。我在获取单元格外部单元格的 indexPath
时遇到问题。我想获取函数的索引路径并使用它将内容发送到另一个视图。该图像是在单元格中以编程方式创建的,它有一个发送到此函数的点击手势识别器(其中“myIndex
”被定义为 Int : var myIndex = 0
):
// tap image to go at the indexpath of the user
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
print("image tapped")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "patientProfile") as! PatientProfileVC
secondViewController.userID = posts[myIndex].userID
secondViewController.patientName = posts[myIndex].author
print("Passed data to the other view")
self.show(secondViewController, sender: self)
}
我知道我可以在 IndexPath 中使用 didSelectItem,我也有 myIndex
的声明,但我有一些东西会从那里的 segue 触发:
//standard functon for item selected
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//get the index of the cell
myIndex = indexPath.row
print("Cell is selected")
//perform the segue
self.performSegue(withIdentifier: "CommentsVC", sender: self)
print(myIndex)
}
我对 segue 的表现是这样的:` override
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("Segue Initiated")
feed.navigationItem.title = nil
//if segue.destination is CommentsFullVC{
print("Comments segue initiated")
let secondViewController = segue.destination as! CommentsFullVC
secondViewController.questionData = posts[myIndex].postContent
secondViewController.authorName = posts[myIndex].author
secondViewController.date = posts[myIndex].normalDate
secondViewController.profileImagePath = posts[myIndex].pathToImage
secondViewController.typeOfClinic = posts[myIndex].clinic
secondViewController.postID = posts[myIndex].postID
secondViewController.followersForPost = posts[myIndex].followers
}
所以我的问题是,如何在不使用 prepareForSegue 的情况下将这 2 个字段传递给另一个视图?我为此苦苦挣扎了 20 个小时,但仍然无法弄清楚。
secondViewController.userID = posts[myIndex].userID
secondViewController.patientName = posts[myIndex].author
更新:由于 Jose 的回答,它开始工作了,现在它看起来像这样......以防有人遇到与我相同的问题。
// tap image to go at the indexpath of the user
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
print("image tapped")
let pointInCollectionView = tapGestureRecognizer.location(in: collectionView)
let indexPath = collectionView?.indexPathForItem(at: pointInCollectionView)
print(indexPath!)
// this one works - show segue
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "patientProfile") as! PatientProfileVC
secondViewController.userID = posts[(indexPath?.row)!].userID
secondViewController.patientName = posts[(indexPath?.row)!].author
print("Passed data to the other view")
self.show(secondViewController, sender: self)
}
获取 tapGestureRecognizer
在 collectionView
中的位置,然后获取 indexPath
在给定位置的位置
let pointInCollectionView = tapGestureRecognizer.location(in: collectionView)
let indexPath = collectionView.indexPathForItem(at: pointInCollectionView)
如果你的代码像下面这样写,那么试试这个
行方法的集合视图单元格
cell.image = indexPath.row
let tap = UITapGestureRecognizer.init(target: self, action: #selector(imageTapped(_:)))
tap.accessibilityElements = [indexPath]
cell.image.addGestureRecognizer(tap)
你的函数在集合视图之外
func imageTapped (_ sender:UITapGestureRecognizer) {
let index = sender.accessibilityElements?.first as! IndexPath
print(index.row)
myIndex = index.row
}
我认为这对于单元格的代表来说很容易,但有点复杂。
简单的答案应该是将索引存储在点击图像的 imageView 的 "tag" 属性 中,然后从 gestureRecognizer 中提取
您可以在创建 imageView 的位置添加标签,恢复标签的代码如下所示:
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
print("image tapped")
var myIndex = 0
if let imageView = tapGestureRecognizer.view {
myIndex = imageView.tag
}
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "patientProfile") as! PatientProfileVC
secondViewController.userID = posts[myIndex].userID
secondViewController.patientName = posts[myIndex].author
print("Passed data to the other view")
self.show(secondViewController, sender: self)
}
首先我是swift的新手,所以要温柔。我在获取单元格外部单元格的 indexPath
时遇到问题。我想获取函数的索引路径并使用它将内容发送到另一个视图。该图像是在单元格中以编程方式创建的,它有一个发送到此函数的点击手势识别器(其中“myIndex
”被定义为 Int : var myIndex = 0
):
// tap image to go at the indexpath of the user
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
print("image tapped")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "patientProfile") as! PatientProfileVC
secondViewController.userID = posts[myIndex].userID
secondViewController.patientName = posts[myIndex].author
print("Passed data to the other view")
self.show(secondViewController, sender: self)
}
我知道我可以在 IndexPath 中使用 didSelectItem,我也有 myIndex
的声明,但我有一些东西会从那里的 segue 触发:
//standard functon for item selected
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//get the index of the cell
myIndex = indexPath.row
print("Cell is selected")
//perform the segue
self.performSegue(withIdentifier: "CommentsVC", sender: self)
print(myIndex)
}
我对 segue 的表现是这样的:` override
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("Segue Initiated")
feed.navigationItem.title = nil
//if segue.destination is CommentsFullVC{
print("Comments segue initiated")
let secondViewController = segue.destination as! CommentsFullVC
secondViewController.questionData = posts[myIndex].postContent
secondViewController.authorName = posts[myIndex].author
secondViewController.date = posts[myIndex].normalDate
secondViewController.profileImagePath = posts[myIndex].pathToImage
secondViewController.typeOfClinic = posts[myIndex].clinic
secondViewController.postID = posts[myIndex].postID
secondViewController.followersForPost = posts[myIndex].followers
}
所以我的问题是,如何在不使用 prepareForSegue 的情况下将这 2 个字段传递给另一个视图?我为此苦苦挣扎了 20 个小时,但仍然无法弄清楚。
secondViewController.userID = posts[myIndex].userID
secondViewController.patientName = posts[myIndex].author
更新:由于 Jose 的回答,它开始工作了,现在它看起来像这样......以防有人遇到与我相同的问题。
// tap image to go at the indexpath of the user
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
print("image tapped")
let pointInCollectionView = tapGestureRecognizer.location(in: collectionView)
let indexPath = collectionView?.indexPathForItem(at: pointInCollectionView)
print(indexPath!)
// this one works - show segue
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "patientProfile") as! PatientProfileVC
secondViewController.userID = posts[(indexPath?.row)!].userID
secondViewController.patientName = posts[(indexPath?.row)!].author
print("Passed data to the other view")
self.show(secondViewController, sender: self)
}
获取 tapGestureRecognizer
在 collectionView
中的位置,然后获取 indexPath
在给定位置的位置
let pointInCollectionView = tapGestureRecognizer.location(in: collectionView)
let indexPath = collectionView.indexPathForItem(at: pointInCollectionView)
如果你的代码像下面这样写,那么试试这个
行方法的集合视图单元格
cell.image = indexPath.row
let tap = UITapGestureRecognizer.init(target: self, action: #selector(imageTapped(_:)))
tap.accessibilityElements = [indexPath]
cell.image.addGestureRecognizer(tap)
你的函数在集合视图之外
func imageTapped (_ sender:UITapGestureRecognizer) {
let index = sender.accessibilityElements?.first as! IndexPath
print(index.row)
myIndex = index.row
}
我认为这对于单元格的代表来说很容易,但有点复杂。
简单的答案应该是将索引存储在点击图像的 imageView 的 "tag" 属性 中,然后从 gestureRecognizer 中提取 您可以在创建 imageView 的位置添加标签,恢复标签的代码如下所示:
func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
print("image tapped")
var myIndex = 0
if let imageView = tapGestureRecognizer.view {
myIndex = imageView.tag
}
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "patientProfile") as! PatientProfileVC
secondViewController.userID = posts[myIndex].userID
secondViewController.patientName = posts[myIndex].author
print("Passed data to the other view")
self.show(secondViewController, sender: self)
}