处理 'How many items do you have selected' 类型计数器的最佳方法是什么?
What is the best way to approach a 'How many items do you have selected' type counter?
我的意思是:我有一个 Table 视图和已填充的单元格,我希望每个单元格在被选中时 link 处于其打开或关闭状态,在其布尔值。当它处于 'On' 状态时,它会向计数器添加 +1,当它被单击到 'Off' 状态时,它会收回该计数(因此减去)。我在 class 中有一个 bool 填充 table 视图,这样它在通过搜索栏过滤数据时不会混淆选择
想象一个 'How many items do you have selected' 类型的计数器。
我不确定的是如何将 bool 连接到选择本身,以免它“混淆”。欢迎举例!
谢谢
为了解决这个问题,我需要一个自定义 table 视图单元格。这里有一个很棒的教程:https://www.youtube.com/watch?v=OQYqGM5_wVY&list=LL&index=16&t=752s
它实际上显示了 table 视图中开关的使用。
要有一个计数器,我会使用 UINotification Center。在自定义 table 视图单元格 swift 文件中,我会在您的开关操作中添加类似以下代码的内容:
if switch.isOn{
NotificationCenter.default.post(Notification(name: Notification.Name("tableSwitchClicked"), object: nil, userInfo: ["isOn":true]))
} else {
NotificationCenter.default.post(Notification(name: Notification.Name("tableSwitchClicked"), object: nil, userInfo: ["isOn":false]))
}
“开关”是您开关的插座名称。
然后将其添加到 viewDidLoad 中的 viewcontroller swift 文件中:
NotificationCenter.default.addObserver(self, selector: #selector(changeSwitchCounter(_:)), name: Notification.Name("tableSwitchClicked"), object: nil)
最后,在主视图控制器中 viewDidLoad 之后的代码中:
@objc func changeSwitchCounter(_ notification: Notification){
let positiveChange = notification.userInfo!["isOn"] as! Bool
if positiveChange == true {
switchOnCount += 1
} else if positiveChange == false {
switchOnCount -= 1
}
}
其中 switchOnCount 是您用来跟踪开关数量的变量。我希望这可以帮助你!有问题欢迎评论。
可能最简单的解决方案是使用简单的变量“计数器”并在 UITableViewDelegate
方法 didSelectRowAt
(向上计数)和方法 didDeselectRowAt
(向下计数)
中计算您的选择]
以下是一些步骤和示例代码:
- 创建
UITableview
并使您的 UIViewController
符合 UITableViewDelegate
协议。然后将方法添加到您的 UIViewController
并符合 yourTableView.delegate = yourViewController
(可能只是自己)。
添加委托方法:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.counter += 1
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
self.counter -= 1
}
我的意思是:我有一个 Table 视图和已填充的单元格,我希望每个单元格在被选中时 link 处于其打开或关闭状态,在其布尔值。当它处于 'On' 状态时,它会向计数器添加 +1,当它被单击到 'Off' 状态时,它会收回该计数(因此减去)。我在 class 中有一个 bool 填充 table 视图,这样它在通过搜索栏过滤数据时不会混淆选择
想象一个 'How many items do you have selected' 类型的计数器。
我不确定的是如何将 bool 连接到选择本身,以免它“混淆”。欢迎举例!
谢谢
为了解决这个问题,我需要一个自定义 table 视图单元格。这里有一个很棒的教程:https://www.youtube.com/watch?v=OQYqGM5_wVY&list=LL&index=16&t=752s 它实际上显示了 table 视图中开关的使用。
要有一个计数器,我会使用 UINotification Center。在自定义 table 视图单元格 swift 文件中,我会在您的开关操作中添加类似以下代码的内容:
if switch.isOn{
NotificationCenter.default.post(Notification(name: Notification.Name("tableSwitchClicked"), object: nil, userInfo: ["isOn":true]))
} else {
NotificationCenter.default.post(Notification(name: Notification.Name("tableSwitchClicked"), object: nil, userInfo: ["isOn":false]))
}
“开关”是您开关的插座名称。 然后将其添加到 viewDidLoad 中的 viewcontroller swift 文件中:
NotificationCenter.default.addObserver(self, selector: #selector(changeSwitchCounter(_:)), name: Notification.Name("tableSwitchClicked"), object: nil)
最后,在主视图控制器中 viewDidLoad 之后的代码中:
@objc func changeSwitchCounter(_ notification: Notification){
let positiveChange = notification.userInfo!["isOn"] as! Bool
if positiveChange == true {
switchOnCount += 1
} else if positiveChange == false {
switchOnCount -= 1
}
}
其中 switchOnCount 是您用来跟踪开关数量的变量。我希望这可以帮助你!有问题欢迎评论。
可能最简单的解决方案是使用简单的变量“计数器”并在 UITableViewDelegate
方法 didSelectRowAt
(向上计数)和方法 didDeselectRowAt
(向下计数)
以下是一些步骤和示例代码:
- 创建
UITableview
并使您的UIViewController
符合UITableViewDelegate
协议。然后将方法添加到您的UIViewController
并符合yourTableView.delegate = yourViewController
(可能只是自己)。
添加委托方法:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.counter += 1
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
self.counter -= 1
}