我需要设计屏幕截图中提到的屏幕:
在这里,我被要求根据数据库中可用的记录数动态地添加'N'个UITableView
。
我在谷歌搜索了很多但没有教程/指导可用。所以我认为这个问题会帮助很多像我一样面临同样问题的人。
答案 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,您将获得许多解决方案。
希望这会有所帮助:)