更改UILabel文本的一部分

时间:2014-02-06 19:31:25

标签: ios objective-c

在Macintosh编程的深层,遥远的过去,您可以在对话框中放置“^ 0”,UI将用您分配给第0个字符串替换的文本替换它。 (这是很久以前的事了,我甚至不记得这个条款。)我认为你可以用替换来达到^ 3。

iOS UILabel中有类似内容吗?

我有一个UILabel,它会显示如下内容:“你正在使用^ 0字节的数据。”我想用编程方式替换^ 0。我更愿意在故事板中直观地设计文本,然后让视图控制器用准确的值替换小部分。这可能会使本地化变得更容易。

我打算使用的解决方法是不要花哨,只需用完整的字符串分配整个UILabel文本。我更喜欢在故事板中执行尽可能多的UI可视化而不是代码。但目前的设计原则是否会促进这一点?

3 个答案:

答案 0 :(得分:1)

只需在运行时调用stringByReplacingOccurrencesOfString:withString:,将标签文本的^0部分替换为您想要的文字。

通过使用自动布局,您的布局将进行调整,以适应标签的大小调整。

编辑:在评论中,您补充说您希望能够在应用程序的整个生命周期内重复执行此替换。您可以通过使用属性文本并标记替换所在的位置来实现。这是我在自己的机器上测试的一个例子,我用今天的日期/时间替换标签文本的中间部分:

- (IBAction)doUpdateLabel:(id)sender {
    NSMutableAttributedString* mas = [self.lab.attributedText mutableCopy];
    NSRange r = [mas.string rangeOfString:@"^0"];
    if (r.length) { // first time only
        [mas addAttribute:@"HERE" value:@1 range:r];
        [mas replaceCharactersInRange:r withString:[[NSDate date] description]];
    } else {
        [mas enumerateAttribute:@"HERE" inRange:NSMakeRange(0, mas.length) options:0 
         usingBlock:^(id value, NSRange range, BOOL *stop) {
            if ([value isEqual: @1]) {
                [mas replaceCharactersInRange:range withString:[[NSDate date] description]];
                *stop = YES;
            }
        }];
    }
    self.lab.attributedText = mas;
}

答案 1 :(得分:0)

这就是你要做的事情:

self.myLabel.text = [NSString stringWithFormat:@"You are using %f bytes of data.", myBytesInFloatValue];

这是一个方便的指南,指出您应该为不同类型的变量使用哪种格式(上面的%f):

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1

答案 2 :(得分:0)

您正在寻找格式字符串,如下所示:

labelName.text = [NSString stringWithFormat:"You are using %f bytes of data.", bytes];

故事板仅允许您设置静态文本,并且无法动态访问对象以更改文本。这是因为您的查看 cant 访问您的模型,但您的模型可以访问该视图。这与MVC范式背道而驰。