我有一个UILabel
。 UILabel
中的文本看起来像这样:
Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Website - example.com
YouTube - youtube.com/example
Twitter - twitter.com/example
Instagram - twitter.com/example
因此,此文本是动态的。我从API获得字符串,并且该API包含一个类似于上面的字符串。第一段更改。它可以是多个段落或任何内容。但是带有网站链接的文本保持不变。
好吧,基本上,我希望标签仅显示字符串的第一部分。然后,每当用户按下按钮时,它就会显示整个字符串。由于字符串的第一部分发生更改,因此无法设置numberOfLines
。有什么办法告诉标签只显示
Website - example.com
YouTube - youtube.com/example
Twitter - twitter.com/example
Instagram - twitter.com/example
,然后每当按下按钮时,显示整个字符串?
希望这并不太令人困惑。感谢您的帮助!我正在使用Swift4。
答案 0 :(得分:0)
如果采用相同的格式,并且您知道将第一个字符串与其余字符串分开的元素,则可以对字符串使用split函数将原始str拆分为子字符串。
class ViewController: UIViewController
{
@IBOutlet weak var myLabel: UILabel!
let strFromApi = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \nWebsite - example.com \nYouTube - youtube.com/example \nTwitter - twitter.com/example \nInstagram - twitter.com/example"
override func viewDidLoad()
{
super.viewDidLoad()
self.myLabel.text = getFirstSection(of: strFromApi)
}
func getFirstSection(of str: String) -> String
{
if let newStr = str.split(separator: "\n").first
{
return String(newStr)
}
return str
}
@IBAction func seeMoreAction(_ sender: UIButton)
{
self.myLabel.text = strFromApi
}
}
答案 1 :(得分:0)
您可以将标签的文本分为两部分:从API获得的labelContent
和要添加到标签的固定字符串labelFooter
。然后,将属性观察器放在它们上以更新UILabel
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
/// The actual text that you get from the API
var labelContent = "" {
didSet {
label.text = labelContent + (isExpanded ? labelFooter : "")
}
}
/// The fixed footer string
let labelFooter = """
Website - example.com
YouTube - youtube.com/example
Twitter - twitter.com/example
Instagram - twitter.com/example
"""
/// Whether or not the label shows the footer
var isExpanded = false {
didSet {
// A trick to trigger `didSet` on `labelContent`
labelContent = { labelContent }()
}
}
override func viewDidLoad() {
// Get this from the API
labelContent = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
// This is a trick to trigger to `didSet` observer on `isExpanded`
isExpanded = { isExpanded }()
}
/// The action to show/hide the footer
@IBAction func toggleExpand(_ sender: Any) {
isExpanded = !isExpanded
}
}