在Macintosh编程的深层,遥远的过去,您可以在对话框中放置“^ 0”,UI将用您分配给第0个字符串替换的文本替换它。 (这是很久以前的事了,我甚至不记得这个条款。)我认为你可以用替换来达到^ 3。
iOS UILabel
中有类似内容吗?
我有一个UILabel
,它会显示如下内容:“你正在使用^ 0字节的数据。”我想用编程方式替换^ 0。我更愿意在故事板中直观地设计文本,然后让视图控制器用准确的值替换小部分。这可能会使本地化变得更容易。
我打算使用的解决方法是不要花哨,只需用完整的字符串分配整个UILabel
文本。我更喜欢在故事板中执行尽可能多的UI可视化而不是代码。但目前的设计原则是否会促进这一点?
答案 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):
答案 2 :(得分:0)
您正在寻找格式字符串,如下所示:
labelName.text = [NSString stringWithFormat:"You are using %f bytes of data.", bytes];
故事板仅允许您设置静态文本,并且无法动态访问对象以更改文本。这是因为您的查看 cant 访问您的模型,但您的模型可以访问该视图。这与MVC范式背道而驰。