繁体   English   中英

更改UILabel的部分文本

[英]Change part of the text of a UILabel

在Macintosh编程的悠久历史中,您可以在对话框中放入“ ^ 0”,UI会将其替换为您分配给第0个字符串替换的文本。 (这是很久以前的,我什至不记得它的条款。)我认为您的替代品可能会提高到^ 3。

iOS UILabel有类似的东西吗?

我有一个UILabel ,它将显示类似以下内容: “您正在使用^ 0字节的数据。” 我想以编程方式替换^ 0。 我宁愿在情节提要中直观地设计文本,然后让视图控制器仅用准确的值替换一小部分。 这可能会使本地化更加容易。

我计划使用的解决方法是不要花哨,而只给整个UILabel文本分配完整的字符串。 我希望在情节提要中对UI进行尽可能多的可视化,而不是代码。 但是当前的设计原则是否可以促进这一点?

只需在运行时调用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;
}

这是您要做的:

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

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

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

情节提要仅允许您设置静态文本,而不能动态访问对象以更改文本。 这是因为您的视图 无法访问您的模型,但是您的模型可以访问该视图。 这与MVC范例背道而驰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM