如何使用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? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
创建一个viewcontroller并将现有VC的标签和按钮添加到新的VC Swift iOS
如何在 iOS swift 中使用多个属性初始化 CBMutableCharacteristic