在Label中将下划线显示为空格

时间:2012-09-04 22:00:55

标签: iphone objective-c ios cocoa-touch uitableview

在我的应用程序中,我有一个tableview,其中包含Basic样式的动态单元格列表。每个单元格的textLabel都是从xml中提取的,并包含下划线代替空格。我使用标签文本来识别在didSelectRowAtIndexPath中点击了哪个单元格,并将其与其他xml文件中相同字符串的其他匹配项匹配。为了使其工作,标签需要包含下划线,但是如果它们是空格则看起来更好。

所以我的问题是,我可以设置labelText以将下划线显示为空格但保留底层字符串中的下划线,以便它仍然匹配使用下划线的xml吗?

5 个答案:

答案 0 :(得分:3)

您可以将labelText显示为您喜欢的任何内容。在tableView:cellForRowAtIndexPath:中,只需使用您已替换下划线空格的字符串配置单元格(请参阅stringByReplacingOccurrencesOfString:withString:以轻松完成此操作)。

答案 1 :(得分:1)

您可以从XML中提取一个字符串数组,然后在将标签放入显示单元格时将下划线过滤到空格中。这可能就是我接近它的方式。或者就此而言,您可以在两个方向上过滤字符串,但是无论如何我可以更直接地存储XML文件中的版本。

答案 2 :(得分:1)

正如我在评论中所说,我不认为当前的设计对于要求是最佳的,但如果绝对没有别的方法可以做到这一点,而不是基本上将数据存储在单元格的标签中,我会这样做像这样:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip
{
    /* instantiate cell here */
    NSString *cellText = /* however you need to get the cell text */;
    cellText = [cellText stringByReplacingOccurrencesOfString:@"_" withString:@" "];
    cell.textLabel.text = cellText;
    /* whatever other cell setup you need */
}

然后在选择回调中:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip
{
    UITableViewCell *cell = [tv cellForRowAtIndexPath:ip];
    NSString *cellText = cell.textLabel.text;
    cellText = [cellText stringByReplacingOccurrencesOfString:@" " withString:@"_"];
    /* go do whatever with cellText */
}

希望这有帮助。

答案 3 :(得分:0)

您可以创建一个用空格替换_的新字符串。这将保持原始字符串不被修改(这通常不是问题,因为它可能是不可变的(即NSString而不是NSMutableString))。

self.labelText.text = [incomingString stringByReplacingOccurrencesOfString:@"_" withString:@" "];

答案 4 :(得分:0)

您可以创建一个NSValueTransformer的子类,它只是将'_'的出现替换为''这不会影响该值,但如果按钮的stringValue绑定到该值,则会更改外观,并带有值转换器选项。

这假设按钮的stringValue是通过绑定设置的,其他答案假定文本是手动设置的。