可滑动段控件每页只包含1个tableview

时间:2016-09-01 02:38:07

标签: ios swift xcode

我目前正在开设一个在线商店应用程序,可以查看任何正在销售的产品并直接从应用程序购买。

如何实现具有不可预测数量的部分的可滑动段控件,该部分仅连接到包含表视图的一个视图控制器,该视图根据所选部分更新自身? (因此,当正在更新桌面视图时,选择另一个部分时,幻灯片效果就像幻灯片一样)

有很多类别具有不同数量的附加子类别,它们作为分段控制的一部分。我真的不想用很多View控制器充斥我的故事板,同一个tableview包含相同的单元格。所以,让我们说有一个主要类别包含50+子类别,我不认为我应该使用相同的tableview制作50个View控制器。谢谢你。 :)

1 个答案:

答案 0 :(得分:1)

由于您想重用一个View Controller,我已经覆盖了一些方法并添加了以下方法,并且没有更改代码中的任何其他内容:

  • numberOfPagesInSegmentedPager
  • didSelectViewWithIndex
  • segueIdentifierForPageAtIndex

因此,您只能使用一个视图控制器。

我更改了MXSegmentedPager' Example-Swift 项目的原始源代码:

<强> MXViewController.swift:

import UIKit
import MXSegmentedPager

class MXViewController: MXSegmentedPagerController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.segmentedPager.backgroundColor = UIColor.whiteColor()

        // Parallax Header       
        self.segmentedPager.parallaxHeader.view = MXHeaderView.instanceFromNib();
        self.segmentedPager.parallaxHeader.mode = MXParallaxHeaderMode.Fill;
        self.segmentedPager.parallaxHeader.height = 150;
        self.segmentedPager.parallaxHeader.minimumHeight = 20;


        // Segmented Control customization
        self.segmentedPager.segmentedControl.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationDown;
        self.segmentedPager.segmentedControl.backgroundColor = UIColor.whiteColor()
        self.segmentedPager.segmentedControl.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.blackColor()];
        self.segmentedPager.segmentedControl.selectedTitleTextAttributes = [NSForegroundColorAttributeName : UIColor.orangeColor()]
        self.segmentedPager.segmentedControl.selectionStyle = HMSegmentedControlSelectionStyleFullWidthStripe
        self.segmentedPager.segmentedControl.selectionIndicatorColor = UIColor.orangeColor()


        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
            self.segmentedPager.reloadData()
            //self.segmentedPager.pager.showPageAtIndex(1, animated: false)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //set here the total number of categories
    override func numberOfPagesInSegmentedPager(segmentedPager: MXSegmentedPager) -> Int {
        return 2
    }

    //Here you can get to know , which view user has selected.
    override func segmentedPager(segmentedPager: MXSegmentedPager, didSelectViewWithIndex index: Int) {
        print("didSelectViewWithIndex:\(index)")
    }

    override func segmentedPager(segmentedPager: MXSegmentedPager, segueIdentifierForPageAtIndex index: Int) -> String {
        return "mx_page_0"
    }

    override func segmentedPager(segmentedPager: MXSegmentedPager, titleForSectionAtIndex index: Int) -> String {
        return ["Table", "Web", "Text"][index];
    }

    override func segmentedPager(segmentedPager: MXSegmentedPager, didScrollWithParallaxHeader parallaxHeader: MXParallaxHeader) {
        NSLog("progress %f", parallaxHeader.progress)
    }
}

<强>故事板:

删除除标识符&#34; mx_page_0&#34;之外的所有segues:

Storyboard

根据View Controller加载数据:

获取一个公共数组,并在用户幻灯片时更新它。