如何使用swift在ios中动态/编程地添加多个UITableView?

时间:2016-05-31 08:07:13

标签: ios swift uitableview swift2

我需要设计屏幕截图中提到的屏幕:

enter image description here 在这里,我被要求根据数据库中可用的记录数动态地添加'N'UITableView

我在谷歌搜索了很多但没有教程/指导可用。所以我认为这个问题会帮助很多像我一样面临同样问题的人。

2 个答案:

答案 0 :(得分:1)

如果你的项目必须处理几个tableViews,你可以完全像这个项目https://github.com/gabrieltheodoropoulos/iOS-Swift-PageControl实现它,但是,你可以使用UITableView而不是使用UIView,你可以完全按照你想要的那样...

您可以通过更正故事板中的scrollView框架来自定义主viewController以添加名称,年龄和更新按钮,这很简单。

P.S。关于内存消耗,如果您的项目很重,您可以考虑一种重用tableView变量的方法,如本stack overflow post中更好的解释

下面是一个如何修改所有代码以实现它的示例:

class ViewController: UIViewController, UIScrollViewDelegate, UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var pageControl: UIPageControl!

    let totalPages = 8  // here you put your datasource array count

    var currentTableView : UITableView!

    let sampleBGColors: Array<UIColor> = [UIColor.redColor(), UIColor.yellowColor(), UIColor.greenColor(), UIColor.magentaColor(), UIColor.orangeColor()]

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        configureScrollView()
        configurePageControl()
    }

    func configureScrollView() {

        scrollView.pagingEnabled = true
        scrollView.showsHorizontalScrollIndicator = false
        scrollView.showsVerticalScrollIndicator = false
        scrollView.scrollsToTop = false
        scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * CGFloat(totalPages), scrollView.frame.size.height)
        scrollView.delegate = self

        // Load the TestView view from the TestView.xib file and configure it properly.
        for i in 0 ..< totalPages {
            // Load the MyTable : a XIB contain a tableView
            let myTable = NSBundle.mainBundle().loadNibNamed("MyTable", owner: self, options: nil)[0] as! UITableView

            // Set its frame and the background color.
            myTable.frame = CGRectMake(CGFloat(i) * scrollView.frame.size.width, scrollView.frame.origin.y, scrollView.frame.size.width, scrollView.frame.size.height)
            myTable.backgroundColor = sampleBGColors[i]

            myTable.delegate = self
            myTable.dataSource = self
            self.currentTableView = myTable

            let label = myTable.viewWithTag(1) as! UILabel
            label.text = "Page #\(i + 1)"

            scrollView.addSubview(myTable)
        }
    }


    func configurePageControl() {
        pageControl.numberOfPages = totalPages
        pageControl.currentPage = 0
    }


    // MARK: UIScrollViewDelegate method implementation

    func scrollViewDidScroll(scrollView: UIScrollView) {
        // Calculate the new page index depending on the content offset.
        let currentPage = floor(scrollView.contentOffset.x / UIScreen.mainScreen().bounds.size.width);

        // Set the new page index to the page control.
        pageControl.currentPage = Int(currentPage)
    }


    // MARK: IBAction method implementation

    @IBAction func changePage(sender: AnyObject) {
        // Calculate the frame that should scroll to based on the page control current page.
        var newFrame = scrollView.frame
        newFrame.origin.x = newFrame.size.width * CGFloat(pageControl.currentPage)
        scrollView.scrollRectToVisible(newFrame, animated: true)

    }

    // Add here UITableViewDelegate and UITableViewDatasource methods..
}

答案 1 :(得分:0)

正如一些评论所说,你可以使用带有水平滚动的滚动视图并动态添加表视图,但如果有太多的表视图,它会创建大量的内存消耗,因为滚动视图会将所有表保留在内存中。分页也可能发生同样的事情。

如果您需要显示太多的表格,则需要使用可以重复使用的内容。

所以,我认为UICollectionView是更好的选择!

使用一个单元格获取集合视图,并在集合视图的单元格中显示tablview。

您可以谷歌了解如何在collectionview中使用tableview,您将获得许多解决方案。

希望这会有所帮助:)