【问题标题】:New IOS5 UISwitch doesn't look disabled in a UITableViewCell新的 IOS5 UISwitch 在 UITableViewCell 中看起来没有禁用
【发布时间】:2011-11-23 17:01:22
【问题描述】:

我在UITableViewCells 中放置了一个UISwitches,并尝试在最初禁用它:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    self.switch = [[UISwitch alloc] init];
    self.switch.enabled = NO;
    cell.accessoryView = self.switch;
    ...
}

在 IOS5 之前的 IOS 版本中,(看起来很旧的)开关被禁用,并且在视图出现时看起来也被禁用(变暗)。

在IOS5中(新外观)开关被禁用了,我不能翻转它,但在这个阶段它看起来并没有被禁用。它与启用的开关具有相同的亮度。

如果我稍后在代码中启用并重新禁用它(不在cellForRowAtIndexPath: 回调中),它看起来确实被禁用(变暗)。

是我做错了什么还是 IOS5 中的错误?

【问题讨论】:

  • 不要使用switch作为开关的名字,它是Objective-C中的保留字。

标签: iphone ios uiswitch ios5


【解决方案1】:

不管怎样,UISwitch 的指定初始化器是-initWithFrame:——你试过用它吗?

【讨论】:

  • 是的,我最初是这样做的,但并没有解决问题。我将其更改为简单的 init,因为 cell.accessoryView 无论如何都会设置框架,我希望使用简单的 init 可以提供解决方案。
  • 即使在这里没有帮助,我也会使用指定的初始化程序。 (这也忽略了部分框架……)
  • 绕过指定的初始化器可能会导致对象初始化不正确,这给你带来麻烦。
【解决方案2】:

我在 iOS 5 上遇到了同样的问题。您可以使用-initWithFrame 创建开关,然后您可以将开关添加为单元格 contentView 的子视图和(不是附件视图,不要忘记计算 contentView 的子视图,否则您可以使用-addSubview: 方法添加一个新的uiswitch。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我通过将所有 UISwitches 保存在一个数组中来解决它。

    然后在我的 viewDidAppear 上,我遍历禁用它们的数组。

    - (void)viewDidAppear:(BOOL)animated {
        for (UISwitch *switchView in switchMArray) {
            switchView.enabled = NO;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多