【问题标题】:Objective-c set cell accessorytype based on cell text? iOS SDKObjective-c根据单元格文本设置单元格附件类型? iOS SDK
【发布时间】:2013-02-01 00:52:27
【问题描述】:

我有一个动态表格视图,有 2 个部分,每个部分有 4 行,由数组填充。

应该只检查一个单元格,目前没有。

我知道要检查的单元格的文本。

所以我的问题是,我可以根据单元格包含的文本为单元格设置附件类型吗?

如果 cell.textLabel.text 等于 THIS 然后设置该单元格的附件类型检查。

任何帮助都会很棒。

编辑编辑编辑编辑

我目前的代码,考虑到下面的 cmets 是这样的:

  switch (indexPath.section) {
        case standardSection:
            serverLoc.textLabel.text = [self.serverSelection objectAtIndex:indexPath.row];
            if ([[self.serverSelection objectAtIndex:indexPath.row] rangeOfString:cellValue].location != NSNotFound) {
                serverLoc.accessoryType = UITableViewCellAccessoryCheckmark;
            }
            break;
        case qualitySection:
            serverLoc.textLabel.text = [self.qServerSelection objectAtIndex:indexPath.row];
            if ([[self.qServerSelection objectAtIndex:indexPath.row] rangeOfString:cellValue].location != NSNotFound) {
                serverLoc.accessoryType = UITableViewCellAccessoryCheckmark;
            }
            break;
        default:
            break;
    }

这些部分是这样设置的:

第 1 节:

伊利诺伊州芝加哥 英国伦敦 加利福尼亚州圣何塞 华盛顿特区

第 2 节:

伊利诺伊州芝加哥 (Q) 英国伦敦 (Q) 加利福尼亚州圣何塞 (Q) 华盛顿特区(Q)

如您所见,我正在检查 CellValue 的值。 CellValue 是使用前一个视图中的委托设置的。

假设这次等于英国伦敦。当我进入这个视图时,英国伦敦和英国伦敦 (Q) 都被选中,我只想要没有 (Q) 的那个被选中。即使使用“isEqualToString”也会发生这种情况。如果 cellValue 等于英国伦敦 (Q),则此方法有效。

【问题讨论】:

    标签: objective-c ios6 cell textlabel accessorytype


    【解决方案1】:

    cellForRowAtIndexPath 中执行此操作。创建单元格后,只需检查数组中的值(假设数组包含 NSStrings)。所以:

    if ([[self.myArray objectAtIndex:indexPath.row] isEqualToString:@"the string I want"]) {
         cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    

    编辑: 根据您的评论,所有字符串都将以相同的内容开头,但可能有所不同。你可以这样做:

    if ([[self.myArray objectAtIndex:indexPath.row] rangeOfString:@"London,"].location != NSNotFound) {
         cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    

    这表示如果 NSString 包含“London”,则计算结果为 YES。或者换句话说,NSString 包含“London”,

    【讨论】:

    • 很抱歉延迟回复您!有其他麻烦,但又回到了这个问题上,是的,它在某种程度上有效。问题是某些单元格是相似的,但对于结尾字母。假设我有“伦敦,英国”和“伦敦,英国 Q”。两者都将被检查,因为它们都包含英国伦敦。无论如何要使 isEqualToString 精确而不是包含?
    • 我更新了我的答案,看看是否有帮助!如果是,请不要忘记接受答案!
    • 我将稍微扩展一下:英国伦敦、加利福尼亚州圣何塞、华盛顿特区和伊利诺伊州芝加哥在一个区域中组成 4 个单元。第二部分相同,但末尾有(Q)。即使您进行了更改,如果两个单元格包含伦敦或芝加哥,它们也会有一个复选标记,这有意义吗?
    • 听起来不错。 :) 现在我有点困惑。编辑后的答案会勾选以伦敦开头的任何内容,因此“伦敦,英国”和“伦敦,英国 Q”......第一次实施时,它只会进行完全匹配。在你给我的系列中你想检查什么?伦敦和芝加哥或只是伦敦有什么吗?在两个部分中还是仅在第一个部分中?
    • 握住手机,它现在可以工作了。我以前在 switch 语句中没有它们。自从移动它们后,我尝试回到 isEqualString 并且它现在可以工作了......谢谢,并接受了!
    【解决方案2】:

    您应该在创建单元格时尝试设置该值(从“模型”而不是通过查看单元格的标签)。

    如果某些情况导致值发生变化,您应该更新您的模型(创建每个单元格时使用的数据);然后拨打[self.tableview reloadData]

    【讨论】:

    • 我使用的是动态单元格,因此它们都具有相同的标识符,因此只能在视图加载后设置附件类型
    • @Dave,您不想在 cellForRowAtIndexPath 之外的任何地方设置附件类型。
    • 您需要/需要在cellForRowAtIndexPath 中设置值。
    • 即使你可以,我也不会。人们会期望在 cellForRowAtIndexPath 中找到该代码。此外,理想情况下,在决定如何创建每个单元格时始终查看您的模型;而不是单元格的内容。我的 2 美分。我希望它对你有帮助。 :)
    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多