Есть ли способ выделить только часть строки? Например:
Приблизительное расстояние: 120 м прочь
Спасибо!
Есть ли способ выделить только часть строки? Например:
Приблизительное расстояние: 120 м прочь
Спасибо!
Что вы можете сделать, это использовать NSAttributedString
.
NSString *boldFontName = [[UIFont boldSystemFontOfSize:12] fontName];
NSString *yourString = ...;
NSRange boldedRange = NSMakeRange(22, 4);
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];
[attrString beginEditing];
[attrString addAttribute:kCTFontAttributeName
value:boldFontName
range:boldedRange];
[attrString endEditing];
//draw attrString here...
Взгляните на этот удобный dandy guide на рисунок NSAttributedString
объектов с основным текстом.
Как упоминал Джейкоб, вы, вероятно, захотите использовать NSAttributedString
или NSMutableAttributedString
. Ниже приведен пример того, как вы можете это сделать.
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Approximate Distance: 120m away"];
NSRange selectedRange = NSMakeRange(22, 4); // 4 characters, starting at index 22
[string beginEditing];
[string addAttribute:NSFontAttributeName
value:[NSFont fontWithName:@"Helvetica-Bold" size:12.0]
range:selectedRange];
[string endEditing];
Если вы не хотите беспокоиться о шрифтах (поскольку не все варианты шрифта содержат "Жирный шрифт" ), вот еще один способ сделать это. Имейте в виду, что в настоящее время это доступно только для OS X...:
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"];
[attrString beginEditing];
[attrString applyFontTraits:NSBoldFontMask
range:NSMakeRange(22, 4)];
[attrString endEditing];
Код выше дал мне сбой, когда я создал UILabel с этим атрибутомString.
Я использовал этот код, и он работал:
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
NSRange boldedRange = NSMakeRange(0, 1);
UIFont *fontText = [UIFont systemFontOfSize:12]; //[UIFont fontWithName:@"Lato-Bold" size:12];
NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil];
[attrString setAttributes:dictBoldText range:boldedRange];
An NSString
- это просто контейнер данных. Он не содержит никаких подробностей о проблемах с презентацией.
Похоже, что вы, вероятно, захотите сделать, это полужирная часть UILabel
, которая используется для отображения вашей строки. Который я не думаю, что вы можете сделать. Но вы всегда можете сломать UI на три ярлыка, один для "Approximate Distance:", один для " 120 м" и один для "прочь". Поместите их в линию друг с другом, и вы должны получить желаемый эффект.
Другим вариантом может быть использование UIWebView
и немного разметки для отображения вашей строки со встроенной информацией форматирования, как описано здесь:
http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview
В Xamarin ios вы можете выделить часть NSString следующим образом:
public static NSMutableAttributedString BoldRangeOfString (string str, float fontSize, int startRange, int lengthRange)
{
var firstAttributes = new UIStringAttributes {
Font = UIFont.BoldSystemFontOfSize(fontSize)
};
NSMutableAttributedString boldString = new NSMutableAttributedString (str);
boldString.SetAttributes (firstAttributes.Dictionary, new NSRange (startRange, lengthRange));
return boldString;
}
и вызовите этот метод:
myLabel = new UILabel ();
...
myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);
Я связал @Jacob Relkin и @Andrew Marin ответы, в противном случае я получил аварии. Вот ответ для iOS9:
UIFont *boldFont = [UIFont boldSystemFontOfSize:12];
NSString *yourString = @"Approximate Distance: 120m away";
NSRange boldedRange = NSMakeRange(22, 4);
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];
[attrString beginEditing];
[attrString addAttribute:NSFontAttributeName
value:boldFont
range:boldedRange];
[attrString endEditing];
Чтобы полужирный шрифт без жесткого кодирования его шрифта, вы можете использовать атрибут StrokeWidth с отрицательным значением:
let s = NSMutableAttributedString(string: "Approximate Distance: 120m away")
s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
Swift
Также включает в себя получение диапазона строки, которую вы хотите динамически изменять
let nameString = "Magoo"
let string = "Hello my name is \(nameString)"
let attributes = [NSFontAttributeName:UIFont.systemFontOfSize(14.0),NSForegroundColorAttributeName: UIColor.black]
let boldAttribute = [NSFontAttributeName:UIFont.boldSystemFontOfSize(14.0)]
let attributedString = NSMutableAttributedString(string: string, attributes: attributes)
let nsString = NSString(string: string)
let range = nsString.rangeOfString(nameString)
if range.length > 0 { attributedString.setAttributes(boldAttribute, range: range) }
someLabel.attributedText = attributedString