uilabel文本仅在需要时使用新行

时间:2014-02-27 08:09:45

标签: ios iphone objective-c cocoa-touch uilabel

这就是我正在使用的:

如果地址,城市,邮编......长度> 0。(这些字段可能在将来增长)

self.addressInfoLbl.text = [NSString stringWithFormat:@"%@\n%@\n%@\n%@\n%@", address, city, zip, state, country];(numberofline == 0)

但如果其中任何一个长度= 0,那么我就得到了不必要的新行。 我正在努力手动准备(附加\ n)。如果有越来越多的字段然后这样做manuallt真的很难。 还有其他正确的方法。我做得对。

由于

5 个答案:

答案 0 :(得分:6)

尝试以下代码。它创建字符串数组,删除空字符串,然后将它们与componentsJoinedByString

连接起来
NSArray *strings = @[address, city, zip, state, country];
strings = [strings filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
NSString *resultString = [strings componentsJoinedByString:@"\n"];

答案 1 :(得分:1)

您可以使用分隔符将对象数组连接到字符串中:

NSArray *props = [NSArray arrayWithObjects: address, city, state, nil];
NSString *joinedString = [props componentsJoinedByString:@"\n"];

你会得到:

"6th avenue\nAtlanta\nGeorgia"

如果您不知道属性数量,请使用NSMutableArray代替NSArray并在运行时添加属性。

答案 2 :(得分:0)

尝试此代码,它不是最佳的,但它可以解决您的问题

NSArray *arr = [NSArray arrayWithObjects: @"address", @"", @"state", nil];
NSString *addressInfo = @"";
for (NSString *str in arr) {
    if (str.length > 0) {
       addressInfo = [addressInfo stringByAppendingString:[NSString stringWithFormat:@"\n%@", str]];
    }
}
if (addressInfo && ![@"" isEqualToString:addressInfo])
    addressInfo = [addressInfo substringFromIndex:1];
NSLog(@"address Info = %@", addressInfo);

答案 3 :(得分:0)

尝试一次,

NSMutableString *joinedString=[NSMutableString string];
NSArray *arr = [NSArray arrayWithObjects: address, city, state, nil];
for(NSString *str in arr)
{
    if([str length]>0) [joinedString appendFormat:@"\n%@", str];
}

NSString *resultString=[joinedString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@", resultString);

答案 4 :(得分:0)

Lbl.numberOfLines=0;
Lbl.lineBreakMode=NSLineBreakByCharWrapping;
相关问题