Dlaczego to zamknięto jako niezwiązane z tematem? To jest uzasadnione pytanie z uzasadnioną odpowiedzią.
len
2
Dlaczego, do licha, jest to oznaczone jako poza tematem przez stackoverflow.com/users/237838/andrew-barber, prawdopodobnie jest to duplikat, ale w żadnym wypadku nie jest poza tematem ...
AppHandwerker
2
Klawisz skrótuALT+8 = •
TheTiger
Odpowiedzi:
163
Być może użyj punktu kodowego Unicode dla znaku punktora w ciągu?
Wybacz moją ignorancję, ale używam UILabels przez cały czas i zastanawiam się, czy możesz wskazać „na przykład”.
daveMac
1
myLabel.numberOfLines = 0daje etykietę wielowierszową, która będzie przestrzegać znaków końca wiersza. Ogólnie jednak lubię używać, UITextFieldponieważ jest bardziej elastyczny. Na przykład możesz łatwo wykryć, który znak kliknął użytkownik podczas pracy z UITextField, nie sądzę, że możesz to zrobić z UILabel. Widoki tekstu mają również wiele innych ciekawych funkcji.
John Erck,
7
Innym sposobem jest użycieoption+8
atulkhatri
3
Pamiętaj, aby użyć dużej litery „u”, jeśli używasz lokalizowalnych ciągów: \ U2022
Nikolaj Nielsen,
1
Swift jest nieco inny, „\ u {2022}”
anders
80
poprostu dodaj " • "
Nawet ja szukałem czegoś takiego dla siebie textView. Co zrobiłem, po prostu dodaj powyższy ciąg z moim ciągiem i przekaż go do mojego textView, to samo można zrobić labelsrównież.
• Pracował dla mnie. Miałem * w Xcode, który po prostu skopiowałem / zastąpiłem używając • i działało dobrze dla mojej wytwórni Zastąpiłem „Etykietę” •
Brian
50
Oto fajne rozwiązanie z Swift
let label = UILabel()
label.frame = CGRect(x: 40, y: 100, width: 280, height: 600)
label.textColor = UIColor.lightGray
label.numberOfLines = 0
let arrayString = [
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
]
label.attributedText = add(stringList: arrayString, font: label.font, bullet: "")
self.view.addSubview(label)
@IBOutletweakvar bulletLabel: UILabel!let arrayOfLines = ["Eat egg for protein","You should Eat Ghee","Wheat is with high fiber","Avoid to eat Fish "]
for value in arrayOfLines {
bulletLabel.text = bulletLabel.text! + " • " + value + "\n"
}
Sprawdź ten link, zrobiłem Widok niestandardowy, aby sformatować tekst z punktorami / innymi symbolami / obrazem (używając właściwości attributeText UILabel) jako symbol elementu listy (Swift 3.0)
https://github.com/akshaykumarboth/SymbolTextLabel-iOS- Szybki
import UIKit
classViewController: UIViewController{
@IBOutletvar symbolView: SymbolTextLabel!var testString = "Understanding the concept of sales"var bulletSymbol = "\u{2022}"var fontsize: CGFloat= 18overridefuncviewDidLoad() {
super.viewDidLoad()
//First way // Dynamically creating SymbolTextLabel objectlet symbolTextLabel = SymbolTextLabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
symbolTextLabel.setText(text: testString, symbolCode: bulletSymbol) //setting text and symbol of text item
symbolTextLabel.setFontSize(textSize: fontsize) // setting font size//symbolTextLabel.setSpacing(spacing: 5) // setting space between symbol and textself.view.addSubview(symbolTextLabel)
//second way // from storyboard or interface builder
symbolView.setText(text: testString, symbolCode: bulletSymbol)
//setting text and symbol of text item
symbolView.setFontSize(textSize: fontsize) // setting font size//symbolView.setSpacing(spacing: 5) // setting space between symbol and text
}
}
Jeśli chcesz wyrównać wcięcia tekstu również dla punktorów, możesz użyć następującej metody, która tworzy znak NSAttributedStringz odpowiednimi właściwościami wcięcia i odstępów:
Możesz użyć tej metody w następujący sposób, przekazując NSArraytekst z tekstami i podając, że masz już UILabel:
NSArray *stringArray = @[@"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
@"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
@"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
@"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
];
label.attributedText = [self attributedStringForBulletTexts:stringArray
withFont:label.font
bulletString:@"•"
indentation:15
lineSpacing:2
paragraphSpacing:10
textColor:UIColor.blackColor
bulletColor:UIColor.grayColor];
Tak. Skopiuj i wklej następujący punktor: •kompilator Swift może zinterpretować i wyświetlić punktor zgodnie z potrzebami w Xcode, nic więcej nie jest potrzebne.
extension Array where Element == String {
var bulletList: String {
var po = ""for (index, item) in self.enumerated() {
if index != 0 {
po += "\n"
}
po += .bullet + item
}
return po
}
}
print(["get apples", "get oranges", "get a bannana"].bulletList)
Jeśli zagłosujesz za. Przynajmniej miej uprzejmość, aby powiedzieć dlaczego.
ScottyBlades
Myślę, że powodem jest to, że twoje rozwiązanie nie jest optymalne. Najlepiej jest używać punktu kodowego Unicode.
Robert J. Clegg
Dziękuję za przemyślaną odpowiedź. Dlaczego punkt Unicode jest lepszy?
ScottyBlades
Ponieważ gdyby programista musiał to zrobić wiele razy, na różnych ekranach lub projektach (nie w tym samym okresie), przyniosłoby to większe korzyści, wiedząc, jaka jest wartość punktu kodowego. Dlatego nie trzeba iść i grzywny powyższej odpowiedzi lub podobnego miejsca, aby ją skopiować. Cóż, to i tak moje przemyślenia.
Robert J. Clegg
1
@ RobertJ.Clegg Właśnie zaktualizowałem odpowiedź, aby zapewnić opcję wielokrotnego użytku. Czy możesz podać przykład sytuacji, w której ciąg znaków kodu sprawia, że punktor jest bardziej wielokrotnego użytku niż bezpośredni ciąg punktora?
ScottyBlades
0
Jeśli ktoś szuka tekstu w widoku tekstowym z punktorami, tak jak ja, poniżej znajduje się odpowiedź. Nawiasem mówiąc, działa tylko w przypadku tekstu statycznego.
• Better experience - Refer a friend and How to Play \n• Tournaments performance improvement\n• UI/UX Improvements\n• Critical bug fixes
Powyższy tekst przypisałem do widoku tekstu. Działało zgodnie z przeznaczeniem dla mnie.
UILabel
s nie traktują swojego tekstu jako HTML.ALT+8 = •
Odpowiedzi:
Być może użyj punktu kodowego Unicode dla znaku punktora w ciągu?
Cel C
myLabel.text = @"\u2022 This is a list item!";
Szybki 4
myLabel.text = "\u{2022} This is a list item!"
źródło
myLabel.numberOfLines = 0
daje etykietę wielowierszową, która będzie przestrzegać znaków końca wiersza. Ogólnie jednak lubię używać,UITextField
ponieważ jest bardziej elastyczny. Na przykład możesz łatwo wykryć, który znak kliknął użytkownik podczas pracy zUITextField
, nie sądzę, że możesz to zrobić zUILabel
. Widoki tekstu mają również wiele innych ciekawych funkcji.option+8
poprostu dodaj
" • "
Nawet ja szukałem czegoś takiego dla siebie
textView
. Co zrobiłem, po prostu dodaj powyższy ciąg z moim ciągiem i przekaż go do mojegotextView
, to samo można zrobićlabels
również.Odpowiedziałem na to dla przyszłej przeglądarki.
źródło
Oto fajne rozwiązanie z Swift
let label = UILabel() label.frame = CGRect(x: 40, y: 100, width: 280, height: 600) label.textColor = UIColor.lightGray label.numberOfLines = 0 let arrayString = [ "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ] label.attributedText = add(stringList: arrayString, font: label.font, bullet: "") self.view.addSubview(label)
Dodaj atrybuty punktorów
func add(stringList: [String], font: UIFont, bullet: String = "\u{2022}", indentation: CGFloat = 20, lineSpacing: CGFloat = 2, paragraphSpacing: CGFloat = 12, textColor: UIColor = .gray, bulletColor: UIColor = .red) -> NSAttributedString { let textAttributes: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: font, NSAttributedStringKey.foregroundColor: textColor] let bulletAttributes: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: font, NSAttributedStringKey.foregroundColor: bulletColor] let paragraphStyle = NSMutableParagraphStyle() let nonOptions = [NSTextTab.OptionKey: Any]() paragraphStyle.tabStops = [ NSTextTab(textAlignment: .left, location: indentation, options: nonOptions)] paragraphStyle.defaultTabInterval = indentation //paragraphStyle.firstLineHeadIndent = 0 //paragraphStyle.headIndent = 20 //paragraphStyle.tailIndent = 1 paragraphStyle.lineSpacing = lineSpacing paragraphStyle.paragraphSpacing = paragraphSpacing paragraphStyle.headIndent = indentation let bulletList = NSMutableAttributedString() for string in stringList { let formattedString = "\(bullet)\t\(string)\n" let attributedString = NSMutableAttributedString(string: formattedString) attributedString.addAttributes( [NSAttributedStringKey.paragraphStyle : paragraphStyle], range: NSMakeRange(0, attributedString.length)) attributedString.addAttributes( textAttributes, range: NSMakeRange(0, attributedString.length)) let string:NSString = NSString(string: formattedString) let rangeForBullet:NSRange = string.range(of: bullet) attributedString.addAttributes(bulletAttributes, range: rangeForBullet) bulletList.append(attributedString) } return bulletList }
Oto wynik:
źródło
W Swift 4 użyłem „•” z nową linią
@IBOutlet weak var bulletLabel: UILabel! let arrayOfLines = ["Eat egg for protein","You should Eat Ghee","Wheat is with high fiber","Avoid to eat Fish "] for value in arrayOfLines { bulletLabel.text = bulletLabel.text! + " • " + value + "\n" }
Wynik:
źródło
W Swift 3.1
lblItemName.text = "\u{2022} This is a list item!"
źródło
Sprawdź ten link, zrobiłem Widok niestandardowy, aby sformatować tekst z punktorami / innymi symbolami / obrazem (używając właściwości attributeText UILabel) jako symbol elementu listy (Swift 3.0) https://github.com/akshaykumarboth/SymbolTextLabel-iOS- Szybki
import UIKit class ViewController: UIViewController { @IBOutlet var symbolView: SymbolTextLabel! var testString = "Understanding the concept of sales" var bulletSymbol = "\u{2022}" var fontsize: CGFloat= 18 override func viewDidLoad() { super.viewDidLoad() //First way // Dynamically creating SymbolTextLabel object let symbolTextLabel = SymbolTextLabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) symbolTextLabel.setText(text: testString, symbolCode: bulletSymbol) //setting text and symbol of text item symbolTextLabel.setFontSize(textSize: fontsize) // setting font size //symbolTextLabel.setSpacing(spacing: 5) // setting space between symbol and text self.view.addSubview(symbolTextLabel) //second way // from storyboard or interface builder symbolView.setText(text: testString, symbolCode: bulletSymbol) //setting text and symbol of text item symbolView.setFontSize(textSize: fontsize) // setting font size //symbolView.setSpacing(spacing: 5) // setting space between symbol and text } }
źródło
Jeśli chcesz wyrównać wcięcia tekstu również dla punktorów, możesz użyć następującej metody, która tworzy znak
NSAttributedString
z odpowiednimi właściwościami wcięcia i odstępów:- (NSAttributedString *)attributedStringForBulletTexts:(NSArray *)stringList withFont:(UIFont *)font bulletString:(NSString *)bullet indentation:(CGFloat)indentation lineSpacing:(CGFloat)lineSpacing paragraphSpacing:(CGFloat)paragraphSpacing textColor:(UIColor *)textColor bulletColor:(UIColor *)bulletColor { NSDictionary *textAttributes = @{NSFontAttributeName: font, NSForegroundColorAttributeName: textColor}; NSDictionary *bulletAttributes = @{NSFontAttributeName: font, NSForegroundColorAttributeName: bulletColor}; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.tabStops = @[[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentLeft location:indentation options:@{}]]; paragraphStyle.defaultTabInterval = indentation; paragraphStyle.lineSpacing = lineSpacing; paragraphStyle.paragraphSpacing = paragraphSpacing; paragraphStyle.headIndent = indentation; NSMutableAttributedString *bulletList = [NSMutableAttributedString new]; for (NSString *string in stringList) { NSString *formattedString = [NSString stringWithFormat:@"%@\t%@\n", bullet, string]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:formattedString]; if (string == stringList.lastObject) { paragraphStyle = [paragraphStyle mutableCopy]; paragraphStyle.paragraphSpacing = 0; } [attributedString addAttributes:@{NSParagraphStyleAttributeName: paragraphStyle} range:NSMakeRange(0, attributedString.length)]; [attributedString addAttributes:textAttributes range:NSMakeRange(0, attributedString.length)]; NSRange rangeForBullet = [formattedString rangeOfString:bullet]; [attributedString addAttributes:bulletAttributes range:rangeForBullet]; [bulletList appendAttributedString:attributedString]; } return bulletList; }
Możesz użyć tej metody w następujący sposób, przekazując
NSArray
tekst z tekstami i podając, że masz jużUILabel
:NSArray *stringArray = @[@"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", @"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", @"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", @"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ]; label.attributedText = [self attributedStringForBulletTexts:stringArray withFont:label.font bulletString:@"•" indentation:15 lineSpacing:2 paragraphSpacing:10 textColor:UIColor.blackColor bulletColor:UIColor.grayColor];
źródło
Tak. Skopiuj i wklej następujący punktor:
•
kompilator Swift może zinterpretować i wyświetlić punktor zgodnie z potrzebami w Xcode, nic więcej nie jest potrzebne.Ponowne użycie
extension String { static var bullet: String { return "• " } } print(String.bullet + "Buy apples") let secondPoint: String = .bullet + "Buy oranges" print(secondPoint)
wynik
Tablica wielokrotnego użytku
extension Array where Element == String { var bulletList: String { var po = "" for (index, item) in self.enumerated() { if index != 0 { po += "\n" } po += .bullet + item } return po } } print(["get apples", "get oranges", "get a bannana"].bulletList)
wynik
• get apples • get oranges • get a bannana
źródło
Jeśli ktoś szuka tekstu w widoku tekstowym z punktorami, tak jak ja, poniżej znajduje się odpowiedź. Nawiasem mówiąc, działa tylko w przypadku tekstu statycznego.
• Better experience - Refer a friend and How to Play \n• Tournaments performance improvement\n• UI/UX Improvements\n• Critical bug fixes
Powyższy tekst przypisałem do widoku tekstu. Działało zgodnie z przeznaczeniem dla mnie.
źródło
Oto rozwiązanie z @krunal refaktoryzowane do
NSAttributedString
rozszerzenia Swift 5 :import UIKit public extension NSAttributedString { static func makeBulletList(from strings: [String], bulletCharacter: String = "\u{2022}", bulletAttributes: [NSAttributedString.Key: Any] = [:], textAttributes: [NSAttributedString.Key: Any] = [:], indentation: CGFloat = 20, lineSpacing: CGFloat = 1, paragraphSpacing: CGFloat = 10) -> NSAttributedString { let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.defaultTabInterval = indentation paragraphStyle.tabStops = [ NSTextTab(textAlignment: .left, location: indentation) ] paragraphStyle.lineSpacing = lineSpacing paragraphStyle.paragraphSpacing = paragraphSpacing paragraphStyle.headIndent = indentation let bulletList = NSMutableAttributedString() for string in strings { let bulletItem = "\(bulletCharacter)\t\(string)\n" var attributes = textAttributes attributes[.paragraphStyle] = paragraphStyle let attributedString = NSMutableAttributedString( string: bulletItem, attributes: attributes ) if !bulletAttributes.isEmpty { let bulletRange = (bulletItem as NSString).range(of: bulletCharacter) attributedString.addAttributes(bulletAttributes, range: bulletRange) } bulletList.append(attributedString) } if bulletList.string.hasSuffix("\n") { bulletList.deleteCharacters( in: NSRange(location: bulletList.length - 1, length: 1) ) } return bulletList } }
źródło