' _ SegmentedControlItems'没有实现methodSignatureForSelector: - 麻烦提前无法识别的选择器

时间:2017-06-26 08:49:51

标签: ios uisegmentedcontrol swift4

我正在以编程方式创建一个没有storyboard的UISegmented控件。而不是从数组中提取分段项目,我试图使用Model Class,

class SegmentedControlItems{
    let title: String

    init(title:String) {
        self.title = title
    }
}

然后,在表视图函数中,我编写了以下代码

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        headerView.backgroundColor = UIColor.white
        let items:[SegmentedControlItems] = {
            let item1 = SegmentedControlItems(title: "Repeat Task")
            let item2 = SegmentedControlItems(title: "One time task")
            return [item1, item2]
        }()

        let segmentedControl: UISegmentedControl = {

            let segmentedControl = UISegmentedControl(items: items)

            segmentedControl.tintColor = UIColor(red:0.44, green:0.75, blue:0.27, alpha:1.0)
            segmentedControl.selectedSegmentIndex = 0
            segmentedControl.translatesAutoresizingMaskIntoConstraints = false
            return segmentedControl
        }()
       headerView.addSubview(segmentedControl)

}

如果我传递项目数组,我的应用程序工作正常。但是在我编写上面的代码后它崩溃了。并在控制台中给我这个错误 - SForwarding:警告:类的对象0x600000251640' Appname.SegmentedControlItems'没有实现methodSignatureForSelector: - 提前麻烦 无法识别的选择器 - [Appname.SegmentedControlItems copy]

请帮忙

1 个答案:

答案 0 :(得分:1)

这里的问题是你提供了一个对象数组(而这些对象又包含了作为属性的值),而不是传递一组标题。

如果要使用模型,则必须更改以下行

let segmentedControl = UISegmentedControl(items: items)

let segmentedControl: UISegmentedControl = UISegmentedControl(items: items.map({
        $0.title
    }))