如何通过 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 【问题描述】:

我在嵌入了UICollectionViewUITableViewCell 中找到了UIButton(查看全部)。当按下UIButton 时,它应该将UICollectionView 中找到的所有项目传递并列出到目标ViewController

这是我的UITableViewCell 的代码,其中包含UIButtonUICollectionView

 @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 UIViewuse of undeclared type UIViewController & use of undeclared type UIResponder 在其中导入 UIKit 好的,您的解决方案有效,但它向我显示了所有事件。我想查看特定表行的事件,这些事件被分类为每个索引行的类别 您必须将索引发送到表格视图单元格并在其中创建一个带有 indexPath 的变量,并将该索引(从 tableView cellForRowAt indexPath 发送)分配给单元格中的变量以及单击 ViewAll 时。从较大的数组中获取该特定索引处的项目。

以上是关于如何通过 segue 到下一个 ViewController 使“查看全部”按钮显示数据?的主要内容,如果未能解决你的问题,请参考以下文章

segue 按钮到下一个视图控制器在 xcode 中引发错误

如何使 Xcode segues 不可逆?

执行由 UITableViewCell 调用的 Segue

将数据从一个视图控制器传递到下一个视图控制器,而无需在 swift 中进行 segue

VC 之间的 Swift Segue 没有任何联系

故事板中的 Segues 问题