【问题标题】:UISwitch in UITableView reset to original value while scrollingUITableView 中的 UISwitch 在滚动时重置为原始值
【发布时间】:2011-05-25 02:29:59
【问题描述】:

我有一个带有自定义单元格的 UITableview。其中一个 customcell 中有一个 UISWITCH。当滚动表格视图时,即使我将其设置为 ON,开关的状态也会重置。如何在滚动期间保持开关的状态。任何帮助表示赞赏。

-(IBAction)sameDriver:(id)sender{

if ([sender isOn]){

    NSLog(@"%@",(otherdriver.drive ? @"YES" : @"NO"));

    NSUserDefaults* defaults  = [NSUserDefaults standardUserDefaults];
    [defaults setBool: YES forKey: K_SWITCH_KEY];
    [defaults synchronize];

    Switchon = [defaults boolForKey: K_SWITCH_KEY];


if(Switchon){

    otherdriver.dfname.text = fname;
    otherdriver.dlname.text = lname;
    otherdriver.demail.text = email;
    otherdriver.dpnum.text = phone;

    }
}
else if(![sender isOn]){

    NSUserDefaults* defaults  = [NSUserDefaults standardUserDefaults];
    [defaults setBool: NO forKey: K_SWITCH_KEY];
    [defaults synchronize];

   NSLog(@"%@",(otherdriver.drive ? @"YES" : @"NO"));

    Switchon = [defaults boolForKey: K_SWITCH_KEY];

    otherdriver.dfname.text = drfname;
    otherdriver.dlname.text = drlname;
    otherdriver.demail.text = dremail;
    otherdriver.dpnum.text = drphone;


}}

我在 IB 中设置 UISwitch。它位于自定义 UITableviewcell 内。

谢谢

【问题讨论】:

  • 如果您发布自定义 UITableViewCell 类的代码会有所帮助
  • 请在 EDIT 中查看我的代码。
  • 那么每个单元格只有一个开关?
  • 只有一个单元格中没有一个开关。所有其他单元格仅包含文本字段。

标签: ios uitableview uiswitch


【解决方案1】:

在你的头文件中,声明一个 NSString 来保存开关的状态。 我们将其命名为 theSwitchPosition

然后,在触发开关时运行的方法中,使 SwitchPosition 保持开关的状态:

theSwitchPosition = [NSString stringWithFormat:@"%@", switchControl.on ? @"ON" : @"OFF"];

之后,在创建 UISwitch 的方法中,根据保存数据的字符串设置开关的状态:

if ([theSwitchPosition isEqualToString:@"ON"]) {
    mySwitch.on = YES;
} else {
    mySwitch.on = NO;
}

如果您的表格视图中只有一个 UISwitch,这将起作用。如果你有多个,你需要使用 NSMutableArray 来代替。

【讨论】:

    【解决方案2】:

    我假设您的意思是,如果您向下滚动(开关单元格滚出屏幕),然后向上滚动(开关单元格滚回屏幕上),则不会保留开关的状态。这是正确的吗?

    如果是这样,我猜问题是细胞正在被回收和重新创建。当您从dequeReusableCellWithIdentifier:CellIdentifier 获取您的手机时,就会发生这种情况。要解决此问题,您需要为您的特殊单元格指定一个不同的 CellIdentifier

    如果仍然不清楚,请将您的代码粘贴到tableView:cellForRowAtIndexPath:,我会尽力为您提供进一步的帮助。

    【讨论】:

    • func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TrackerFilterCell") as! TrackerTypeFilterCellVC if allChecked == true { cell.switchButton.isOn = true } else { if lastIndex == 0 { cell.switchButton.isOn = false } else if rowData.id == "-1" { cell.switchButton.isOn = false } } 返回单元格 }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2020-10-29
    • 2019-06-23
    相关资源
    最近更新 更多