2014-02-06 62 views
1

在Macintosh編程的深遠歷史過程中,您可以在對話框中放入「^ 0」,UI將用您分配給第0個字符串替換的文本替換它。 (這是很久以前的事了,我甚至不記得這個條件。)我認爲你可以用替代品來達到^ 3。更改UILabel文本的一部分

在iOS UILabel中有沒有類似的東西?

我有一個UILabel即將顯示如下內容:「您正在使用^ 0字節的數據。」我想以編程方式替換^ 0。我寧願直觀地設計故事板中的文字,然後讓視圖控制器用準確的值替換小部分。這可能會使本地化更容易。

我打算使用的解決方法是不要花哨,只給整個字符串分配整個UILabel文本。我寧願在故事板中完成儘可能多的UI顯示,而不是代碼。但目前的設計原則是否促進了這一點

+0

嘿朋友PLZ檢查這個鏈接它可能會解決你的問題https://github.com/Abizern/ADNOrdinalNumberFormatter – freelancer

回答

0

您正在尋找字符串格式,像這樣:

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

故事板只允許你設置靜態文本和動態地斜面訪問對象來更改文本。這是因爲您的查看cant訪問您的模型,但您的模型可以訪問該視圖。這違背了MVC範例。

+0

這與我計劃使用的解決方法相符。很高興知道它不能完成。我將使用@matt的建議並使用可本地化的字符串。 –

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; 
} 
+0

實際上有一個相當複雜的方式來做這種事情時,涉及本地化。您應該觀看有關此主題的WWDC 2013視頻。 – matt

+0

我用這種方法看到的問題是我只能使用它一次。在我替換了^ 0之後,它就消失了,如果這些值發生了變化,我就不能再做了。否則,我會更好地使用其他建議,這些建議都與我準備使用的解決方法相匹配。但是,「讓您的應用程序適應全球」視頻非常有用,我將在實施時使用我在那裏學到的知識。 –

+0

但是,您在原始問題中沒有提出此問題:您沒有說您想要一次又一次地替換文本。但是,有一種方法可以做到這一點。使用屬性字符串代替字符串。當您第一次執行替換時,請通過顏色的細微差異來標記要替換的文本片段:只有一個顏色組件中的幾個點。現在,您可以永久搜索該顏色,並替換該文本。 – matt