不同 Table 视图部分中的不同布局
Different Layout in different Table view sections
您好,我想在 UITableView 的不同部分使用不同的布局,我想使用动态原型单元而不是静态单元来实现。
我不知道如何创建它,请帮助。任何链接或东西。我想这样实现,请看图片
pls download the pic
swift.
如果有的话请给出你的代码
根据您的详细信息,您似乎想要一个分组的 tableView,其中您的不同部分将具有不同类型的单元格。这很容易。
那么让我们开始吧。我通过屏幕截图从头开始解释了整个过程。只要跟着这个,你就会明白这个概念和过程。
(我假设,您知道如何添加必要的约束)
首先,转到 Storyboard 并在控制器中拖动一个 tableView。
然后创建2个Custom UITableViewCell classes-
现在将 2 个 TableView 单元格拖放到情节提要中的 TableView 中。
因此,您的 TableView 中有 2 个 tableView 单元格,您已经为其创建了两个自定义单元格。
现在,我们需要给单元格class赋值,这样它才能明白自己应该对应哪个class。 Select 故事板中的第一个单元格,单击 class 检查器并指定其 class-
对第二个单元格执行相同操作 -
我们还需要给他们唯一的标识符。 Select 第一个单元格并分配一个标识符,如 -
对第二个单元格执行相同的操作 -
我们几乎完成 UI 的设置。最后一块是告诉 UITableView 它将成为 "Group" 类型。
再次 select TableView 并将其类型分配给 "Group" like-
现在,我们可以开始了。
让我们在我们之前创建的自定义 TableViewCell 中声明一些 IBOutlet。
TypeOneTableViewCell.swift class-
import UIKit
class TypeOneTableViewCell: UITableViewCell {
@IBOutlet weak var cellImageView: UIImageView!
@IBOutlet weak var cellTitleLabel: UILabel!
@IBOutlet weak var cellSubtitleLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
}
和TypeTwoTableViewCell.swiftclass-
import UIKit
class TypeTwoTableViewCell: UITableViewCell {
@IBOutlet weak var cellTitleLabel: UILabel!
@IBOutlet weak var cellSubtitleLabel: UILabel!
@IBOutlet weak var cellButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
}
}
转到 Storyboard 并在第一个原型单元格中添加一个图像和两个标签,并将它们附加到插座上。
现在在第二个单元格中,添加一个按钮和两个标签,并像以前一样连接插座-
设置完毕。让我们开始做一些实际的事情。转到您的控制器 class 并首先为您的 tableView 创建一个 IBOutlet,例如-
@IBOutlet weak var groupedTableView :UITableView!
不要忘记在情节提要中附加 TableView 的出口。
现在,我们需要 TableView 委托和数据源。因此,让我们将它们包含在协议列表中,例如-
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
现在,您可能会遇到错误,因为您尚未实现 UITableViewDatasource 协议中所需的委托方法,但没关系,很快就会解决。
第一件事。指定谁将实施委托和数据源方法。转到您的 viewDidLoad
方法并添加此 -
override func viewDidLoad() {
super.viewDidLoad()
self.groupedTableView.dataSource! = self
self.groupedTableView.delegate! = self
}
然后告诉你的 tableView 你将通过 numberOfSectionsInTableView
方法有 2 个部分,比如-
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2
}
然后指定每个部分将包含多少个单元格。假设第一部分包含 4 行,第二部分包含 3 行。为此,请使用 numberOfRowsInSection
方法。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
if section == 0{
return 4
}
else{
return 3
}
}
最后一部分,定义单元格及其数据-
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
if indexPath.section == 0{
let cell : TypeOneTableViewCell = tableView.dequeueReusableCellWithIdentifier("typeOneCell", forIndexPath: indexPath) as! TypeOneTableViewCell
cell.imageView!.image = UIImage(named: "noImage.png")
cell.cellTitleLabel.text = "Header " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
cell.cellSubtitleLabel.text = "Details " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
return cell
}
else{
let cell : TypeTwoTableViewCell = tableView.dequeueReusableCellWithIdentifier("TypeTwoCell", forIndexPath: indexPath) as! TypeTwoTableViewCell
cell.cellTitleLabel.text = "Header " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
cell.cellSubtitleLabel.text = "Details " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
return cell
}
}
给你! TableView 有许多委托方法,如 heightForRowAtIndexPath
来指定自定义单元格的高度。在我的例子中,我将它指定为 80.0 like-
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 80.0
}
您可以使用这些委托方法进行更多自定义。查看苹果的 UITableView.
指南
P.S。 : 为了美化,我在这里加了一张图。如果你以同样的方式实现,我做到了,你应该看到像-
这样的输出
希望对您有所帮助。
要使单元格动态,请执行以下操作:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if (indexPath.row==0 && indexPath.section==0){
//static cell
return 120 //static height
}
return UITableViewAutomaticDimension //for dynamic cell height
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
此外,您需要确保单元格中的元素与自动布局绑定,以便正确放置具有动态高度的元素。
您好,我想在 UITableView 的不同部分使用不同的布局,我想使用动态原型单元而不是静态单元来实现。 我不知道如何创建它,请帮助。任何链接或东西。我想这样实现,请看图片 pls download the pic
swift.
如果有的话请给出你的代码根据您的详细信息,您似乎想要一个分组的 tableView,其中您的不同部分将具有不同类型的单元格。这很容易。
那么让我们开始吧。我通过屏幕截图从头开始解释了整个过程。只要跟着这个,你就会明白这个概念和过程。
(我假设,您知道如何添加必要的约束)
首先,转到 Storyboard 并在控制器中拖动一个 tableView。
然后创建2个Custom UITableViewCell classes-
现在将 2 个 TableView 单元格拖放到情节提要中的 TableView 中。
因此,您的 TableView 中有 2 个 tableView 单元格,您已经为其创建了两个自定义单元格。
现在,我们需要给单元格class赋值,这样它才能明白自己应该对应哪个class。 Select 故事板中的第一个单元格,单击 class 检查器并指定其 class-
对第二个单元格执行相同操作 -
我们还需要给他们唯一的标识符。 Select 第一个单元格并分配一个标识符,如 -
对第二个单元格执行相同的操作 -
我们几乎完成 UI 的设置。最后一块是告诉 UITableView 它将成为 "Group" 类型。
再次 select TableView 并将其类型分配给 "Group" like-
现在,我们可以开始了。
让我们在我们之前创建的自定义 TableViewCell 中声明一些 IBOutlet。
TypeOneTableViewCell.swift class-
import UIKit
class TypeOneTableViewCell: UITableViewCell {
@IBOutlet weak var cellImageView: UIImageView!
@IBOutlet weak var cellTitleLabel: UILabel!
@IBOutlet weak var cellSubtitleLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
}
和TypeTwoTableViewCell.swiftclass-
import UIKit
class TypeTwoTableViewCell: UITableViewCell {
@IBOutlet weak var cellTitleLabel: UILabel!
@IBOutlet weak var cellSubtitleLabel: UILabel!
@IBOutlet weak var cellButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
}
}
转到 Storyboard 并在第一个原型单元格中添加一个图像和两个标签,并将它们附加到插座上。
现在在第二个单元格中,添加一个按钮和两个标签,并像以前一样连接插座-
设置完毕。让我们开始做一些实际的事情。转到您的控制器 class 并首先为您的 tableView 创建一个 IBOutlet,例如-
@IBOutlet weak var groupedTableView :UITableView!
不要忘记在情节提要中附加 TableView 的出口。
现在,我们需要 TableView 委托和数据源。因此,让我们将它们包含在协议列表中,例如-
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
现在,您可能会遇到错误,因为您尚未实现 UITableViewDatasource 协议中所需的委托方法,但没关系,很快就会解决。
第一件事。指定谁将实施委托和数据源方法。转到您的 viewDidLoad
方法并添加此 -
override func viewDidLoad() {
super.viewDidLoad()
self.groupedTableView.dataSource! = self
self.groupedTableView.delegate! = self
}
然后告诉你的 tableView 你将通过 numberOfSectionsInTableView
方法有 2 个部分,比如-
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2
}
然后指定每个部分将包含多少个单元格。假设第一部分包含 4 行,第二部分包含 3 行。为此,请使用 numberOfRowsInSection
方法。
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
if section == 0{
return 4
}
else{
return 3
}
}
最后一部分,定义单元格及其数据-
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
if indexPath.section == 0{
let cell : TypeOneTableViewCell = tableView.dequeueReusableCellWithIdentifier("typeOneCell", forIndexPath: indexPath) as! TypeOneTableViewCell
cell.imageView!.image = UIImage(named: "noImage.png")
cell.cellTitleLabel.text = "Header " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
cell.cellSubtitleLabel.text = "Details " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
return cell
}
else{
let cell : TypeTwoTableViewCell = tableView.dequeueReusableCellWithIdentifier("TypeTwoCell", forIndexPath: indexPath) as! TypeTwoTableViewCell
cell.cellTitleLabel.text = "Header " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
cell.cellSubtitleLabel.text = "Details " + "\(indexPath.section)" + "-" + "\(indexPath.row)"
return cell
}
}
给你! TableView 有许多委托方法,如 heightForRowAtIndexPath
来指定自定义单元格的高度。在我的例子中,我将它指定为 80.0 like-
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 80.0
}
您可以使用这些委托方法进行更多自定义。查看苹果的 UITableView.
指南P.S。 : 为了美化,我在这里加了一张图。如果你以同样的方式实现,我做到了,你应该看到像-
这样的输出希望对您有所帮助。
要使单元格动态,请执行以下操作:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if (indexPath.row==0 && indexPath.section==0){
//static cell
return 120 //static height
}
return UITableViewAutomaticDimension //for dynamic cell height
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
此外,您需要确保单元格中的元素与自动布局绑定,以便正确放置具有动态高度的元素。