【问题标题】:Change labels text from array in alphabetical order按字母顺序更改数组中的标签文本
【发布时间】:2018-03-13 17:43:24
【问题描述】:

我有一个标签数组和一个字母数组,我想按字母顺序打印标签中的每个字母。

我对字母数组进行了排序,但我不知道如何对标签数组进行排序。

class ViewController: UIViewController {

    @IBOutlet var labels: [UILabel]!

    override func viewDidLoad() {
        super.viewDidLoad()
        wordToLabel()
    }

    let letters = ["B", "E", "C", "D", "A"]

    func wordToLabel() {
        for index in labels.indices {
            let label = labels[index]
            let sortedLetters = letters.sorted { $0 < $1 }
            label.text = sortedLetters[index]
            print(sortedLetters)
        }
    }

}

我可以不使用UITableView吗?

【问题讨论】:

  • 为什么要对标签对象进行排序?如果您按顺序为它们分配排序的文本,它们应该显示为已排序。除了每次通过循环对相同的字母进行排序之外,您当前的解决方案有什么问题?
  • @PhillipMills 目前这些字母未排序
  • 也许,将标签添加到标签,然后通过标签对其进行排序会有所帮助?
  • 您视图中的标签是否以正确的顺序出现在labels 数组中?如果没有,简单的解决方法是在情节提要中更正它们。
  • @PhillipMills 你是对的,问题来自尚未排序的标签数组,我该如何排序?

标签: ios arrays swift sorting uilabel


【解决方案1】:

您一定要确保标签的顺序正确。除此之外,您可以执行以下操作:

let letters = ["B", "E", "C", "D", "A"]

func wordToLabel() {
    let sortedLetters = letters.sorted()
    let sortedLabels = labels.sorted { $0.frame.origin.y < $1.frame.origin.y }

    for (index, label) in sortedLabels.enumerated() {
        label.text = sortedLetters[index]
    }
}

【讨论】:

  • $0.frame.origin.y &lt; $1.frame.origin.y 正是我所需要的,谢谢!
【解决方案2】:

如果我们假设您的 labels 数组的顺序正确,那么您可以这样做:

let letters = ["B", "E", "C", "D", "A"]

func wordToLabel() {
  let sortedLetters = letters.sorted()
  for (index, label) in labels.enumerated() {
    label.text = sortedLetters[index]
}

使用labels.enumerated 可以让您访问索引和项目。然后您可以使用index 来通过sortedLetters

顺便说一句,sortedLetters 被留在了循环之外,因为您不应该对其进行多次排序。

希望对您有所帮助。

【讨论】:

  • 非常感谢这个方法,我认为问题出在标签数组的顺序不正确,这就是我试图用for index in labels.indices {, let label = labels[index]做的事情
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多