如何使用 Swift 3 正确实现静态单元格
How to properly implement a static cell with Swift 3
我几乎找不到一个教程向我展示如何构建一个使用静态单元格的应用程序;带有可点击的单元格。基于一些过时的发布和 object-c 答案,我把一些东西放在一起。我的问题是,当我点击一个单元格时,我得到 staticDemoTableCell
is has no member present
.
我在我的 UIViewController 中嵌入了一个 Table 控制器。对于那个单元格(到目前为止只有一个),我创建了一个 class:
class staticDemoTableCell: UITableViewCell, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func awakeFromNib() {
[...]
tableView.delegate = self
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("clicked") // Works when the cell is clicked
// self.present() do not work. I need to present another viewcontroller when this cell is clicked
}
}
有些地方不对,每个单元格都是 class?
我真的很想知道我这样做是否正确。我真正想要的是更多这样的。您是否看到过,即:周一分组交易:一个列表,周二:一个列表等。每个单元格都可以点击,就像您的 iOS 设备的设置一样。任何指点将不胜感激。
如果 table 视图只包含 个静态单元格,那就容易多了:
- 在 Interface Builder select 中 table 视图并将
Content
设置为 Static Cells
- 在控制器 class 中创建
IBOutlet
和 IBAction
并连接它们。
- 不需要实施 table 查看数据源方法和子 class 单元格。
因此您可以执行以下操作。设置您的 table 视图,然后将单元格设置为静态,完成后,您需要确保知道您将拥有多少个部分。这取决于您的设计或您想要实现的目标。
那么你可以这样做:
如果您有多个节,并且第 1 节有多个单元格。而第 2 部分只有一个单元格。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.section {
case 1:
switch indexPath.row {
case 0:
// Do something
case 1:
// Do something
default:
break
}
case 2:
// Do something
default:
break
}
}
如果你只有一个部分有两个单元格,你可以这样做:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
// Do something
case 1:
// Do something
default:
break
}
}
希望对您的问题有所帮助。祝你好运
对于不同部分中的行,您可以通过示例对 3 个部分执行以下操作。第 1 节有 1 行,第 2 节有 6 行,第 3 节有 3 行:
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return 1
case 1:
return 6
case 2:
return 3
default:
return 0
}
}
我几乎找不到一个教程向我展示如何构建一个使用静态单元格的应用程序;带有可点击的单元格。基于一些过时的发布和 object-c 答案,我把一些东西放在一起。我的问题是,当我点击一个单元格时,我得到 staticDemoTableCell
is has no member present
.
我在我的 UIViewController 中嵌入了一个 Table 控制器。对于那个单元格(到目前为止只有一个),我创建了一个 class:
class staticDemoTableCell: UITableViewCell, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func awakeFromNib() {
[...]
tableView.delegate = self
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("clicked") // Works when the cell is clicked
// self.present() do not work. I need to present another viewcontroller when this cell is clicked
}
}
有些地方不对,每个单元格都是 class?
我真的很想知道我这样做是否正确。我真正想要的是更多这样的。您是否看到过,即:周一分组交易:一个列表,周二:一个列表等。每个单元格都可以点击,就像您的 iOS 设备的设置一样。任何指点将不胜感激。
如果 table 视图只包含 个静态单元格,那就容易多了:
- 在 Interface Builder select 中 table 视图并将
Content
设置为Static Cells
- 在控制器 class 中创建
IBOutlet
和IBAction
并连接它们。 - 不需要实施 table 查看数据源方法和子 class 单元格。
因此您可以执行以下操作。设置您的 table 视图,然后将单元格设置为静态,完成后,您需要确保知道您将拥有多少个部分。这取决于您的设计或您想要实现的目标。
那么你可以这样做:
如果您有多个节,并且第 1 节有多个单元格。而第 2 部分只有一个单元格。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.section {
case 1:
switch indexPath.row {
case 0:
// Do something
case 1:
// Do something
default:
break
}
case 2:
// Do something
default:
break
}
}
如果你只有一个部分有两个单元格,你可以这样做:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
// Do something
case 1:
// Do something
default:
break
}
}
希望对您的问题有所帮助。祝你好运
对于不同部分中的行,您可以通过示例对 3 个部分执行以下操作。第 1 节有 1 行,第 2 节有 6 行,第 3 节有 3 行:
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return 1
case 1:
return 6
case 2:
return 3
default:
return 0
}
}