在某些单词后禁用换行符

时间:2014-10-13 09:07:20

标签: objective-c uilabel line-breaks

我的应用中有很少的UILabel。通过将numberOfLines设置为0,所有这些都被设置为多行。这样,其中一些有1行,有些有2.我的问题是,根据这个应用程序的语言语法,某些单词永远不应该在最后一条线。

例如,让我们说:“约翰正在收集化石和邮票。”

此行将长期用于在“和”之后出现换行符。根据语法,这不应该发生,所以我想在这个词之前断行,所以不要在换行之后:

John is collecting fossils and
stamps

我想得到:

John is collecting fossils
and stamps

有可能实现这一目标吗?我正在使用iOS 7及更高版本,因此无需关心与旧iOS版本的兼容性。

1 个答案:

答案 0 :(得分:0)

解决方案是使用2种方法创建UILabel的子类。让我们假设,我只想在单词“a”之后禁用换行符(类似的解决方案可以包含多个单词):

- (void)setText:(NSString*)newText {

    [super setText:[self fixSpaces:newText]];

}

- (NSString*)fixSpaces:(NSString*)originalText {

    NSMutableString* tempString = [[NSMutableString alloc] initWithString:originalText];
    [tempString replaceOccurrencesOfString:@"a " withString:@"a " options:NSLiteralSearch range:NSMakeRange(0, tempString.length)];
    return tempString;

}

将被替换的字符串是“a”,即标准的“a”和空格。将替换它的字符串在屏幕上看起来是相同的,但它是'a'且不间断的空间(在MAC上 - Option + Space)。以标准方式将文本设置为UILabel设置任何文本将始终按照需要工作,但将字符串与标签文本进行比较将不起作用(但通过用空格替换不可分隔空格以进行比较,很容易解决)。在storyboard或nib中设置文本自然不起作用。