- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我有一个包含 7 个部分的表格 View ,每个部分有 8 个单元格,其中包含 Stepper(在 UIView 中)、UIButton(在 UIView 中)和 UISwitch(在 UIview 中)。现在我可以设置和获取步进器和 UIButton 的值,但我的问题是 UISwitch。它被重复使用并同时显示开/关状态(有线 UI)。我还维护了一个数组来保存开关状态,但它没有正确反射(reflect)。下面是代码
var myData1 : [Bool] = [false,false,false,false,false,false,false,false]
let cell:DefaultTableViewCell = (self.tblviewSwitchPOints.dequeueReusableCell(withIdentifier: "defaultcell", for: indexPath) as? DefaultTableViewCell)!
cell.viewForButton.tag = indexPath.row
cell.selectionStyle = .none
cell.viewForSwitch.tag = indexPath.row
print("in cell for row")
if indexPath.section == 0
{
switch indexPath.row
{
case 0:
cell.lblMain.text = timePerDay[indexPath.row]
cell.lblTemp.text = row1[0]
cell.lblTime.text = row1[1]
cell.lblMain.tag = indexPath.row
cell.viewForStepper.addSubview(valueStepper1)
cell.viewForButton.addSubview(btnCustom1)
cell.viewForSwitch.addSubview(switchOnOff1)
if myData1.count==0
{
}else
{
switchOnOff1.isOn = myData1[0]
}
switchOnOff1.tag = 0
switchOnOff1.addTarget(self,action:#selector(actionOnOff1(sender:)), for:.valueChanged )
let temp = arrTemp1[indexPath.row]
if arrTimeInDouble1.count==0
{
}else if temp.elementsEqual("FFFF")
{
valueStepper1.value = 5
}else
{
valueStepper1.value = arrTimeInDouble1[indexPath.row]
}
valueStepper1.tag = indexPath.row
btnCustom1.tag = indexPath.row
if arrTime1.count==0
{
}else
{
btnCustom1.titleLabel?.text = arrTime1[indexPath.row]
}
valueStepper1.addTarget(self, action: #selector(valueChangedTemp1(sender:)), for: .valueChanged)
btnCustom1.addTarget(self, action:#selector(datePickerTapped1), for: .touchUpInside)
print("in cell fro row1\(myData1)\(switchOnOff3.isOn)\(switchOnOff1.tag)")
return cell
case 1:
cell.lblMain.text = timePerDay[indexPath.row]
cell.lblTemp.text = row2[0]
cell.lblTime.text = row2[1]
cell.lblMain.tag = indexPath.row
cell.viewForStepper.addSubview(valueStepper2)
cell.viewForSwitch.addSubview(switchOnOff2)
if myData1.count==0
{
}else
{
switchOnOff2.isOn = myData1[1]
}
switchOnOff2.tag = indexPath.row
if arrTimeInDouble1.count==0
{
}else
{
valueStepper2.value = arrTimeInDouble1[indexPath.row]
}
cell.viewForButton.addSubview(btnCustom2)
btnCustom2.tag=indexPath.row
valueStepper2.tag = indexPath.row
if arrTime1.count==0
{
}else
{
btnCustom2.titleLabel?.text = arrTime1[indexPath.row]
}
switchOnOff2.addTarget(self, action: #selector(actionOnOff1(sender:)), for:.valueChanged )
valueStepper2.addTarget(self, action: #selector(valueChangedTemp1(sender:)), for: .valueChanged)
btnCustom2.addTarget(self, action:#selector(datePickerTapped1), for: .touchUpInside)
return cell
}
最佳答案
可能有很多地方出了问题,但我怀疑你的情况是你的每个开关都分配了多个目标/操作对;您使单元出列,然后在交换机上调用 addTarget
,其中先前的目标仍在交换机上。
无论如何,处理这些情况时最好的做法是将大部分代码放入 TableView 单元格中。我实际上建议您使用委托(delegate)将消息从单元格返回到 View Controller ,因此出队应该如下所示:
let cell: DefaultTableViewCell = tableView.dequeueReusableCell(withIdentifier: "defaultcell", for: indexPath) as! DefaultTableViewCell
cell.myObject = myObjectSections[indexPath.section][indexPath.row]
cell.delegate = self
return cell
没有别的了。现在单元格应该执行所有逻辑:
class DefaultTableViewCell: UITableViewCell {
weak var delegate: DefaultTableViewCellDelegate?
var myObject: MyObject? {
didSet { refresh() }
}
override func awakeFromNib() {
super.awakeFromNib()
self.switch.addTarget(self, action:#selector(switchMoved)), for:.valueChanged)
}
func refresh() {
// Change all UI related stuff here
}
@objc private func switchMoved() {
if let myObject = myObject {
delegate?.defaultTableViewCell(self, didChangeWhateverStateOf:myObject to: switch.on)
}
}
}
当然,需要适本地定义协议(protocol)。对于我的情况是
protocol DefaultTableViewCellDelegate: class {
func defaultTableViewCell(_ sender: DefaultTableViewCell, didChangeWhateverStateOf myObject: MyObject, to flag: Bool)
}
并且您的 View Controller 需要实现此协议(protocol)。
有时,为数据添加索引路径实际上可能是有意义的。为此,您只需升级此代码,以便单元格还包含 var indexPath: IndexPath!
。现在,在使单元出队后,您可以分配其新的索引路径。然后在您的委托(delegate)方法中您可以随时访问它:
extension MyViewController: DefaultTableViewCellDelegate {
func defaultTableViewCell(_ sender: DefaultTableViewCell, didChangeWhateverStateOf myObject: MyObject, to flag: Bool) {
print("This is cell at section \(sender.indexPath.section), row: \(sender.indexPath.row)")
}
}
关于ios - 表格单元格中的 UIswitch 重复问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50980766/
案例:我有 2 个 UISwitch - Switch1 和 Switch2。Switch1 控制场景中 UILabel 的可见性。Switch2 激活后关闭 Switch1 及其可见性。 问题:激活
我基本上有两个切换按钮,我希望用户从两个播放器或组播放中进行选择。但是,我不希望用户能够在用户单击其中一个时理想地选择这两个,而另一个则关闭。如何最好地实现这一点? -(void)stateSwi
我正在开发一个应用程序,其中有一个 UISwitch(switch1) 控制其他 UISwitches(开关 2-5)。如果开关 1 打开,则开关 2-5 关闭并禁用。如果 switch1 关闭,sw
我在同一 View 上有多个 UISwitch。在我的表单上,我需要使用 UISwitch 像单选按钮(网络)。不能同时打开超过一个 UISwitch,我只需要一个。 如果一个 UISwitch 打开
我有 11 行或更多行。只需要在第一个单元格中创建一个 UISwitch。当我单击任何行时,UIswitch 会重复。 UITableViewCell *cell = [tableView dequ
我在 PFTableView 中使用 UISwitch。当我打开一个 UISwitch 时,它会触发不同单元格中的另一个开关。下面是 PFTableViewCell 的代码。 override fun
我有一个 UITableView,其中我以编程方式为某些单元格添加了一个 UISwitch 作为 accessoryView。对于委托(delegate)方法didSelectRowAtIndexPa
如何获取给定 iOS 的默认 UISwitch 缩略图图像/阴影等?我正在构建自己的自定义 UISwitch,并希望我创建的拇指 ImageView 看起来与默认 UISwitch 相同。 最佳答案
我有两个 UISwitch....当第二个打开时我需要关闭第一个当第二个关闭时也打开第一个...... 同样,当第一个打开时,第二个将关闭,副varca... 有什么想法吗? 最佳答案 为两个开关添加
是否可以将图像添加到 UISwitch 背景,例如当状态为 ON 时(作为一个背景)和当状态为 OFF 时(另一个背景图像)? 最佳答案 要更改背景颜色(不是图像),您只需执行以下操作即可。这会更改领
我需要实现一个 View ,我需要用户使用"is"或“否”回答几个问题。我想过使用 UISwitch,但据我所知,它不允许用 YES/NO 替换它显示的 ON/OFF 消息。我错了吗? 我想过实现一个
我可以使用下面的代码更改 UISwitch 的颜色,但颜色始终为黄色,如何将颜色更改为另一种颜色? UISwitch *switch1=[[UISwitch alloc]initWithFrame:C
我有一个 UISwitch我把它放在我的 Storyboard 中并将它连接到我的实现文件中的 socket ,并连接了valueChanged:控制事件“值已更改”的方法。但是,仅当我将其从关闭切换
我想让 UISwitch 周围的触摸区域每边大 10 个点。查看相关帖子 (UIButton: Making the hit area larger than the default hit area
我正在开发一个具有 UISwitch 的应用程序。我想以编程方式将开关设置为开/关。我是这样试的,但是当setting时开关已经打开了是 false ... 有任何想法吗? @IBOutlet var
当用户打开开关时,我希望在 UILabel 上显示一个随机值,然后采用相同的随机值,并用它相乘并找到另一个值。我认为我的问题是我尝试使用 let 语句来保存该值,然后尝试从另一个函数回调该 let 值
我的 View Controller 上有一个 UISwitch,所以当我切换它时,按钮的文本会发生变化。我第一次将其关闭和打开时不起作用,但是如果您第二次尝试它,它就会起作用...我的代码中是否缺少
这可能看起来很傻,也许我理解不正确。 我的场景中有一个 UISwitch。 when a login button is clicked if the switch is on - do
我在我的应用程序中使用了 UISwitch 和 valueChanged 目标,如下代码所示。这个开关在我的 UITableView 中 settingsTableCell.androidSwitch
首先是我的 .h 文件: @interface SettingsViewController : UIViewController { IBOutlet UISwitch *gravaSwi
我是一名优秀的程序员,十分优秀!