从嵌套在 TableViewCell 中的 CollectionViewCell 中呈现 ViewController
Presenting a ViewController from within a CollectionViewCell that is nested in a TableViewCell
如何从嵌套在 TableViewCell 中的 CollectionViewCell 中呈现 ViewController,并且 TableViewCell 位于 ViewController 中?
我已经尝试了 presentViewController
和 performSegue
,但无法从单元格中调用它们。
详细解释:
我有三个文件。
- 简介ViewController
- PeopleCategoryTableViewCell
- PeopleCategoryCollectionViewCell
当有人点击 CollectionViewCell 中的故事时,我希望他们重定向到另一个 ViewController 即 SinglePostVC()
我尝试过的:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("inside this")
self.window?.rootViewController?.present(SinglePostVC(), animated: true, completion: nil)
print("outside this")
}
您可以从 PeopleCategoryCollectionViewCell 发出通知并在 ProfileViewController 中监听它,然后您可以正常呈现视图控制器。
本地通知教程:https://useyourloaf.com/blog/local-notifications-with-ios-10/
示例:
NSNotificationCenter
.defaultCenter()
.postNotificationName(kCellTappedKey, object: nil, userInfo: nil)
然后听:
notificationCenter.addObserver(self,
selector: #selector(self.onCellTapped(_:)),
name: kDocumentCellTappedKey,
object: nil)
并添加此功能:
func onCellTapped(notification: NSNotification) { //call perform segue }
像这样使用协议和委托
在tableViewCell
protocol CellDelegate {
func colCategorySelected(_ indexPath : IndexPath)
}
var 委托:CellDelegate?
在didSelect
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
delegate?.colCategorySelected(indexPath)
}
在您的 ProfileViewController 中
class HomeVC: UIViewController , UITableViewDelegate, UITableViewDataSource, CellDelegate{
:
:
func colCategorySelected(_ indexPath : IndexPath){
// Push here
}
:
:
}
别忘了
cellForRow
let Cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! tableCell
Cell.delegate = self // dont forget this line.
return Cell
如何从嵌套在 TableViewCell 中的 CollectionViewCell 中呈现 ViewController,并且 TableViewCell 位于 ViewController 中?
我已经尝试了 presentViewController
和 performSegue
,但无法从单元格中调用它们。
详细解释:
我有三个文件。
- 简介ViewController
- PeopleCategoryTableViewCell
- PeopleCategoryCollectionViewCell
当有人点击 CollectionViewCell 中的故事时,我希望他们重定向到另一个 ViewController 即 SinglePostVC()
我尝试过的:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("inside this")
self.window?.rootViewController?.present(SinglePostVC(), animated: true, completion: nil)
print("outside this")
}
您可以从 PeopleCategoryCollectionViewCell 发出通知并在 ProfileViewController 中监听它,然后您可以正常呈现视图控制器。
本地通知教程:https://useyourloaf.com/blog/local-notifications-with-ios-10/
示例:
NSNotificationCenter
.defaultCenter()
.postNotificationName(kCellTappedKey, object: nil, userInfo: nil)
然后听:
notificationCenter.addObserver(self,
selector: #selector(self.onCellTapped(_:)),
name: kDocumentCellTappedKey,
object: nil)
并添加此功能:
func onCellTapped(notification: NSNotification) { //call perform segue }
像这样使用协议和委托
在tableViewCell
protocol CellDelegate {
func colCategorySelected(_ indexPath : IndexPath)
}
var 委托:CellDelegate?
在didSelect
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
delegate?.colCategorySelected(indexPath)
}
在您的 ProfileViewController 中
class HomeVC: UIViewController , UITableViewDelegate, UITableViewDataSource, CellDelegate{
:
:
func colCategorySelected(_ indexPath : IndexPath){
// Push here
}
:
:
}
别忘了
cellForRow
let Cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! tableCell
Cell.delegate = self // dont forget this line.
return Cell