如何使用swift在ios中动态/编程添加多个UITableView? [关闭]

Posted

技术标签:

【中文标题】如何使用swift在ios中动态/编程添加多个UITableView? [关闭]【英文标题】:How to add multiple UITableView dynamically/programatically in ios using swift? [closed] 【发布时间】:2016-05-31 08:07:13 【问题描述】:

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

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

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

【问题讨论】:

你确定是“n tableviews”而不是“n tableviewrows”吗? 是 N 个表视图,而不是 N 个表视图行。请看我附上的截图。 这么简单,添加一个uiscrollview,然后根据每个tableview的标签添加uitableviews。 @Saranya 最好在这里添加你的图片,以后链接将不可用,所以你的问题将变得难以理解 但 UITableView 的数量只能在运行时确定,而不能在设计时确定。这才是真正的 chellange。 【参考方案1】:

如果你的项目必须处理几个 tableViews,你可以像这个项目 https://github.com/gabrieltheodoropoulos/ios-Swift-PageControl 一样实现它,但是,而不是通过使用 UITableView 来使用 UIView,你可以做你想做的事..

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

附:关于内存消耗,如果您的项目很重,您可以考虑一种方法来重用 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..

【讨论】:

感谢您的出色解决方案。我会尝试这种方法。 我已经尝试过您的方法,非常棒。问题是在 xib 中添加 tableview。因为我需要每个单元格中的复选框和标签。但我这里没有原型单元。还有其他方法可以实现吗? 当然,您必须创建另一个具有 UITableViewCell 类型的 XIB。在这个 *** 帖子中,您可以找到解决方案:***.com/a/25545185/1894067 我为 UITableViewCell 创建了一个带有 M13Checkbox 和标签的 XIB。但是,如果我单击复选框,则不会选择它,而是选择了整行。这里有什么问题吗? 我不知道 M13Checkbox,尝试打开一个新问题,编写库链接并在此处发布问题链接,我会尽力帮助您..【参考方案2】:

正如一些 cmets 所说,您可以将滚动视图与水平滚动一起使用并动态添加表格视图,但如果存在太多表格视图,则会产生大量内存消耗,因为滚动视图会将所有表格保留在内存中。分页也可能发生同样的事情。

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

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

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

你可以google一下如何在collectionview中使用tableview,你会得到很多解决方案。

希望这会有所帮助:)

【讨论】:

以上是关于如何使用swift在ios中动态/编程添加多个UITableView? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Swift快速编程对齐多个事物

创建一个viewcontroller并将现有VC的标签和按钮添加到新的VC Swift iOS

如何使用动态视图 iOS Swift 处理导航?

如何在 iOS swift 中使用多个属性初始化 CBMutableCharacteristic

如何使用swift在字典中添加多个参数[String,Dictionary]?

如何在 iOS 编程中在 Swift 中创建实体文件?