TableView 中的不同单元格 Swift 3
Different Cell in TableView Swift 3
作为初学者,我正在尝试使用 UITableView
和 IOCollectionView
,如何创建不同的单元格(有些单元格有 collection 视图,有些单元格有文本或仅图像,...) 在同一个容器中?
例如:Appstore,顶部的单元格是横幅,包含宽 Collection 视图,第二个单元格包含类别,其他单元格包含标签或按钮。
我和 swift 3 一起工作,更喜欢使用故事板。
假设您确实知道如何创建自定义单元格(如果您不选中 this question)并实现所需的数据源方法,您应该在 cellForRowAt
或 cellForItem
方法-我在代码片段中使用 cellForRowAt
-:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// first row should display a banner:
if indexPath.row == 0 {
let bannerCell = tableView.dequeueReusableCell(withIdentifier: "BannerTableViewCell") as! BannerTableViewCell
// ...
return bannerCell
}
// second row should display categories
if indexPath.row == 1 {
let categoriesCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! CategoriesTableViewCell
// ...
return categoriesCell
}
// the other cells should contains title and subtitle:
let defaultCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! TileAndSubtitleTableViewCell
// ...
return defaultCell
}
使其更具可读性:
您还可以定义 enum
来检查 indexPath.row
而不是将它们与整数进行比较:
enum MyRows: Int {
case banner = 0
case categories
}
现在,您可以与可读值进行比较:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// first row should display a banner:
if indexPath.row == MyRows.banner.rawValue {
let bannerCell = tableView.dequeueReusableCell(withIdentifier: "BannerTableViewCell") as! BannerTableViewCell
// ...
return bannerCell
}
// second row should display categories
if indexPath.row == MyRows.categories.rawValue {
let categoriesCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! CategoriesTableViewCell
// ...
return categoriesCell
}
// the other cells should contains title and subtitle:
let defaultCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! TileAndSubtitleTableViewCell
// ...
return defaultCell
}
作为初学者,我正在尝试使用 UITableView
和 IOCollectionView
,如何创建不同的单元格(有些单元格有 collection 视图,有些单元格有文本或仅图像,...) 在同一个容器中?
例如:Appstore,顶部的单元格是横幅,包含宽 Collection 视图,第二个单元格包含类别,其他单元格包含标签或按钮。
我和 swift 3 一起工作,更喜欢使用故事板。
假设您确实知道如何创建自定义单元格(如果您不选中 this question)并实现所需的数据源方法,您应该在 cellForRowAt
或 cellForItem
方法-我在代码片段中使用 cellForRowAt
-:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// first row should display a banner:
if indexPath.row == 0 {
let bannerCell = tableView.dequeueReusableCell(withIdentifier: "BannerTableViewCell") as! BannerTableViewCell
// ...
return bannerCell
}
// second row should display categories
if indexPath.row == 1 {
let categoriesCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! CategoriesTableViewCell
// ...
return categoriesCell
}
// the other cells should contains title and subtitle:
let defaultCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! TileAndSubtitleTableViewCell
// ...
return defaultCell
}
使其更具可读性:
您还可以定义 enum
来检查 indexPath.row
而不是将它们与整数进行比较:
enum MyRows: Int {
case banner = 0
case categories
}
现在,您可以与可读值进行比较:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// first row should display a banner:
if indexPath.row == MyRows.banner.rawValue {
let bannerCell = tableView.dequeueReusableCell(withIdentifier: "BannerTableViewCell") as! BannerTableViewCell
// ...
return bannerCell
}
// second row should display categories
if indexPath.row == MyRows.categories.rawValue {
let categoriesCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! CategoriesTableViewCell
// ...
return categoriesCell
}
// the other cells should contains title and subtitle:
let defaultCell = tableView.dequeueReusableCell(withIdentifier: "CategoriesTableViewCell") as! TileAndSubtitleTableViewCell
// ...
return defaultCell
}