【问题标题】:Running into a type issue trying to set UILabel into UISegmentedControl item尝试将 UILabel 设置为 UISegmentedControl 项时遇到类型问题
【发布时间】:2020-01-18 16:01:39
【问题描述】:

我有一个通用的UILabel,我将从另一个控制器向其中传递数据。我想要它,这样标签将成为UISegmentedControl 的文本,但是我收到错误消息,即“实例成员'lessonLabel'不能用于类型LearnTopicHeaderView(我的班级是UICollectionReusableView)。

import UIKit

class LearnTopicHeaderView: UICollectionReusableView {

let lessonLabel = UILabel(text: "X Lessons", font: .systemFont(ofSize: 14))

let segmentedControl: UISegmentedControl = {
    let sc = UISegmentedControl(items: ["Overview", lessonLabel, "Apply"]) // Here is the error.
    sc.selectedSegmentIndex = 0
    sc.layer.cornerRadius = 27
    sc.addTarget(self, action: #selector(selectedIndex), for: .valueChanged)
    return sc
}()

}

我不确定如何解决这个问题。

【问题讨论】:

    标签: ios swift label uisegmentedcontrol


    【解决方案1】:

    传递给UISegmentedControl initialiseritems 可以是字符串或UIImage 实例。您不能传递 UILabel 实例。

    【讨论】:

    • 对,我在读它只能是 NSString。有什么方法可以将 UILabel 或其文本属性转换为 NSString?
    • 如果您的意图是分段控件将在标签更改时自动反映标签的文本,那么不会。如果您只想要静态文本“X 课”,那么只需分配该字符串。
    • 课程标签将从另一个控制器传递数据,它可能会说 8 课或 5 课,这是我的意图,你是正确的。分段控件是否可以反映动态更新的标签?感谢您的快速回复。
    • 不,你只需要在要更改文本时调用setTitle
    • 谢谢,这绝对是我需要的。但是,我正在使用它,它仅显示“X 课程”而不是传入的内容。视图上的常规 UILabel(相同的课程标签标签)反映了传入的数据。我应该有一段时间吗调用setTitle,还是刷新数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多