如何通过 segue 到下一个 ViewController 使“查看全部”按钮显示数据?
Posted
技术标签:
【中文标题】如何通过 segue 到下一个 ViewController 使“查看全部”按钮显示数据?【英文标题】:How do I make a "View All" button display data via segue to the next ViewController? 【发布时间】:2019-07-16 07:45:46 【问题描述】:我在嵌入了UICollectionView
的UITableViewCell
中找到了UIButton
(查看全部)。当按下UIButton
时,它应该将UICollectionView
中找到的所有项目传递并列出到目标ViewController
。
这是我的UITableViewCell
的代码,其中包含UIButton
和UICollectionView
:
@IBOutlet weak var ViewAllButton: UIButton!
@IBOutlet weak var EventCollection: UICollectionView!
var events = [Events]()
override func awakeFromNib()
super.awakeFromNib()
ViewAllButton.setIcon(prefixText: "View All ", prefixTextColor: .blue, icon: .typIcons(.chevronRight), iconColor: .blue, postfixText: " ", forState: .normal, iconSize: 24)
extension PopularCell: UICollectionViewDelegate, UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return events.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = EventCollection.dequeueReusableCell(withReuseIdentifier: "EventCell", for: indexPath) as! EventCell
let event = events[indexPath.row]
print("Event Name:\(event.event_name)")
cell.event = event
cell.tag = indexPath.row
return cell
如何让UIButton
(查看全部)显示在目标ViewController
的特定索引处的UICollectionView
中找到的项目?
【问题讨论】:
你如何确定你的索引?如果它设置在您的视图/视图控制器中的某个位置,那么每次设置索引时,您都可以从数据源中检索数据,如果按下视图所有按钮,那么您可以通过 prepareForSegue 将其传递给下一个 VC 非常不清楚的问题。重新整理您的问题,以便我们为您提供帮助。 【参考方案1】:1. Add the following code with in a new file named UIView_Ext:
extension UIView
var parentViewController: UIViewController?
var parentResponder: UIResponder? = self
while parentResponder != nil
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController
return viewController
return nil
2. On View All button Action in the tableViewCell do the following:
self.parentViewController?.performSegue(withIdentifier: "Segue_Identifer", sender: self.events)
3. Implement prepare for segue in the view controller you are having table view controller reference as below:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "Segue_Identifier"
let destinationViewController = segue.destination as! DestinationViewController
destinationViewController.events = events
【讨论】:
在 UIView_Ext 文件中,我收到以下错误:use of undeclared type UIView
、use of undeclared type UIViewController
& use of undeclared type UIResponder
在其中导入 UIKit
好的,您的解决方案有效,但它向我显示了所有事件。我想查看特定表行的事件,这些事件被分类为每个索引行的类别
您必须将索引发送到表格视图单元格并在其中创建一个带有 indexPath 的变量,并将该索引(从 tableView cellForRowAt indexPath 发送)分配给单元格中的变量以及单击 ViewAll 时。从较大的数组中获取该特定索引处的项目。以上是关于如何通过 segue 到下一个 ViewController 使“查看全部”按钮显示数据?的主要内容,如果未能解决你的问题,请参考以下文章
segue 按钮到下一个视图控制器在 xcode 中引发错误