2017-06-26 42 views
0

我編程方式創建UISegmented控制,而不storyboard.Instead從陣列中拔出分割的項目,我想使用模型類的,「_.SegmentedControlItems」不實現methodSignatureForSelector: - 麻煩了無法識別的選擇

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複製]

請幫

+0

爲什麼你使用'SegmentedControlItems'? '-init(items:)'等待一個String或UIImage對象的數組。一個字符串符合'NSCopying'協議,所以我猜'UISegmentedControl'會拷貝它們。要麼你不使用'SegmentedControlItems',或者你可以讓它們符合'NSCopying'。 – Larme

回答

1

這裏的問題在於你提供了一個對象數組(它依次包含值作爲一個屬性),而不是傳遞一個標題數組。

如果你想使用的模式,你必須以下行

let segmentedControl = UISegmentedControl(items: items) 

改變

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

非常感謝..它工作.. :) –

+0

很高興成爲幫助 – Malik