如何在mainViewController中使用pushViewController页面过渡用户

问题描述 投票:0回答:2

我只想在代码中实现这种过渡。gif link但是我似乎没有在Materials的navigationBarViewController中使用navigationController。

因此pushViewController方法不适用于页面转换吗?此代码是使用Material

  import UIKit
  import Material

  /// MaterialCollectionViewDelegate methods.
  extension FeedViewController: MaterialCollectionViewDelegate {
      /// Executed when an item is selected.
      func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
          print(indexPath)
          // --------------------------------My Question--------------------------------------//
          let vc = DetailViewController()
          self.navigationBarViewController?.pushViewController(vc, animated: true)
          // ----------------------------------------------------------------------//
      }  
  }

  class FeedViewController: UIViewController {
      private var collectionView: MaterialCollectionView = MaterialCollectionView()

      override func viewDidLoad() {
          super.viewDidLoad()
          prepareView()
          prepareCollectionView()
      }

      override func viewWillLayoutSubviews() {
          super.viewWillLayoutSubviews()
          collectionView.frame = view.bounds
          collectionView.reloadData()
      }

      override func viewWillAppear(animated: Bool) {
          super.viewWillAppear(animated)
          navigationBarViewController?.navigationBarView.titleLabel?.text = "Home"
      }

      /// Prepares view.
      private func prepareView() {
          view.backgroundColor = MaterialColor.grey.lighten4
      }

      /// Prepares the collectionView
      private func prepareCollectionView() {
          collectionView.dataSource = self
          collectionView.delegate = self
          collectionView.spacingPreset = .Spacing1
          collectionView.contentInsetPreset = .Square1
          collectionView.registerClass(MaterialCollectionViewCell.self, forCellWithReuseIdentifier: "MaterialCollectionViewCell")

          // To avoid being hidden under the hovering MenuView.
          view.addSubview(collectionView)
      }
  }

  extension FeedViewController: MaterialCollectionViewDataSource {
      /// Retrieves the items for the collectionView.
      func items() -> Array<MaterialDataSourceItem> {
          return [
              MaterialDataSourceItem(
                  data: [
                      "title": "Summer BBQ",
                      "detail": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
                      "date": "February 26, 2016"
                  ],
                  width: 150, // Applied when scrollDirection is .Horizontal
                  height: 150 // Applied when scrollDirection is .Vertical
              ),
              MaterialDataSourceItem(
                  data: [
                      "title": "Birthday gift",
                      "detail": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
                      "date": "February 26, 2016"
                  ],
                  width: 250, // Applied when scrollDirection is .Horizontal
                  height: 150 // Applied when scrollDirection is .Vertical
              )
          ]
      }

      /// Number of sections.
      func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
          return 1
      }

      /// Number of cells in each section.
      func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
          return items().count
      }

      /// Retrieves a UICollectionViewCell.
      func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
          let c: MaterialCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MaterialCollectionViewCell", forIndexPath: indexPath) as! MaterialCollectionViewCell

          let item: MaterialDataSourceItem = items()[indexPath.item]

          if let data: Dictionary<String, AnyObject> =  item.data as? Dictionary<String, AnyObject> {

              var cardView: CardView? = c.contentView.subviews.first as? CardView

              // Only build the template if the CardView doesn't exist.
              if nil == cardView {
                  cardView = CardView()

                  c.backgroundColor = nil
                  c.pulseColor = nil
                  c.contentView.addSubview(cardView!)

                  cardView!.pulseScale = false
                  cardView!.divider = false
                  cardView!.depth = .None

                  let titleLabel: UILabel = UILabel()
                  titleLabel.textColor = MaterialColor.grey.darken4
                  titleLabel.font = RobotoFont.regularWithSize(18)
                  titleLabel.text = data["title"] as? String
                  cardView!.titleLabel = titleLabel

                  let detailLabel: UILabel = UILabel()
                  detailLabel.numberOfLines = 2
                  detailLabel.textColor = MaterialColor.grey.darken2
                  detailLabel.font = RobotoFont.regular
                  detailLabel.text = data["detail"] as? String
                  cardView!.detailView = detailLabel

                  c.contentView.addSubview(cardView!)
              } else {
                  cardView?.titleLabel?.text = data["title"] as? String
                  (cardView?.detailView as? UILabel)?.text = data["detail"] as? String
              }

              cardView!.frame = c.bounds
          }

          return c
      }
  }
swift cosmicmind
2个回答
0
投票

在材料1.36.0中,有两个新类,NavigationBar和NavigationController。 NavigationController是UINavigationController的子类,因此在项目堆栈中推入和弹出UIViewControllers的所有功能都是相同的,同时具有轻松自定义控制器外观的能力。

示例App项目显示了如何使用它。


0
投票

您需要将初始视图控制器嵌入导航控制器中。

然后您可以使用,

let newVC = self.storyboard?.instantiateViewControllerWithIdentifier("DetailViewControllerIdentifier") as! DetailViewController

self.navigationController?.pushViewController(newVC, animated: true)

根据您提供的示例gif,过渡是从表视图进行的。因此,您可以在uitableview委托方法didSelectItemAtIndexPath中执行转换。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.