【问题标题】:Delete part of UILabel Programmatically - Xcode以编程方式删除 UILabel 的一部分 - Xcode
【发布时间】:2013-05-29 13:18:31
【问题描述】:

我有一个 UILabel,它显示从 JSON 提要下载的一些数据,该提要显示星期几(周一、周二、周三、周四、周五、周六、周日)。

是否有办法以编程方式告诉 Xcode 将 UILabel 缩短为 3 个字母?

我知道还有其他方法可以实现我想要的,例如一组简单的 if 函数可以完成这项工作,但我不想实际读取标签然后替换它,我只想缩短标签。

这可能吗?

【问题讨论】:

  • 为什么不直接调整UILabel框架的宽度呢?
  • 我想我可以......但如果我想做的事情是可能的,我会很感兴趣。
  • 那行不通。显示 3 个“M”字符的宽度可能会显示 5 或 6 个“l”字符。无论如何,您必须在可能将字母剪成两半和使用省略号之间做出选择。
  • 或者根据字符串和字体计算它可能..但它不会漂亮

标签: ios cocoa uilabel


【解决方案1】:

我没有看到库存 UILabel 的方法,但它很容易继承 UILabel 并覆盖 setText 或文本。

类似

@interface MyLabel : UILabel
@property(assign) NSUInteger maxLength;
@end

@implementation MyLabel 
- (void)setText:(NSString*)s {
    [super setText:[s substringToIndex:self.maxLength]];
}
@end

【讨论】:

  • 谢谢。我会调查的:)
【解决方案2】:

swift 4.2你可以使用这个自定义类:

import UIKit

class LabelWithMaxLength: UILabel {
    var maxLength: Int = 3

    override var text: String? {
        get {
            return super.text
        }
        set(s) {
            super.text = (s as NSString?)?.substring(to: maxLength)
        }
    }
}

在界面生成器中将标签自定义类设置为LabelWithMaxLength

然后在你的代码中像这样使用它:

@IBOutlet weak var dayOfWeekLabel: LabelWithMaxLength!

dayOfWeekLabel.text = "Sunday" //or whatever was the text

结果总是会生成 3 长的字符标签 :)

【讨论】:

    【解决方案3】:
    UILabel *label=[UILabel alloc]init];   //label object
    
    //Assume you will be having label text in labelText NSString object.
    
    label.text=[labelText substringToIndex:3];
    

    【讨论】:

    • OP "我不想真正阅读标签然后替换它,我只想缩短标签。"
    猜你喜欢
    • 2017-04-17
    • 2014-08-07
    • 1970-01-01
    • 2015-04-07
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多