【问题标题】:UISwitch in UITableViewCell id not visually disabledUITableViewCell id 中的 UISwitch 未在视觉上禁用
【发布时间】:2012-04-19 18:04:15
【问题描述】:

我有一个 UITableView,我的所有单元格都有一个 UISwitch 作为附件视图。

我还有一个包含所有 UISwitches 的数组。

在 viewDidAppear 方法中,我遍历我的 UISwitches 数组并禁用它们。

一切正常。

问题是当我上下移动 UITableView 时,隐藏并再次显示的 UISwitches 没有变暗。它们按预期被禁用,但看起来好像已启用。

我该如何解决?

【问题讨论】:

    标签: objective-c ios uitableview uiswitch


    【解决方案1】:

    问题是您的单元正在被重用,因此单元开关正在被重用。一种解决方案是强制您的单元格不被重复使用,即:

        MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    //if (cell == nil) {
    
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:nil options:nil];
    
        for(id currentObject in topLevelObjects){
            if([currentObject isKindOfClass:[UITableViewCell class]]){
                cell = (MyCustomCell *)currentObject;
                break;
            }
        }
    
    //}
    

    请注意 if cell==nil 已被注释掉,因此这些单元格永远不会被重用。显然不适合节省内存等,但如果您没有大型或奇怪的 tableview,您可能甚至不会注意到。

    您可以尝试的另一件事是保留一个布尔值数组,用于确定是否应检查开关,并在cellForRowAtIndexPath 方法中使用该数组。

    【讨论】:

    • @AndréCytryn:编码员的第二个建议更好。单元重用是有原因的。尝试在cellForRowAtIndexPath: 中处理此问题
    • 但是我应该如何处理布尔数组呢?我不清楚它如何帮助我不让开关变暗
    • @AndréCytryn:布尔数组将对应于单元视图的索引 - 所以你会在 cellForRowAtIndexPath: 中知道是否需要启用或禁用某些开关。
    • @rokjarc 我希望禁用所有开关。我有一个分段控件,当 selectedIndex 等于 0 时保持开关处于禁用状态,并在选定索引等于 1 时启用开关。这段代码工作正常。我不知道我是否清楚。我的问题不在于启用或禁用它们,而是当我移动 tableView 时,离开屏幕的开关又回来了,就像它们在视觉上启用一样,但事实并非如此。我要在这里贴一张照片。
    • 第一个显示表格加载的时间:imageshack.us/photo/my-images/815/firstg.png 第二个显示我将表格向上移动一点,然后向下移动一点:imageshack.us/photo/my-images/3/secondy.png 但第一个开关仍处于禁用状态,哪个是对的。尽管如此,它并没有像其他人那样变暗,这是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多