2015-03-08 14 views
5

Merhabalar, bunun için hiçbir işe yaramayan yaş için çalışmaya çalışıyorum, bu sizin için kolay görünüyorsa özür dilerim.UIPickerView'i hızlı bir şekilde birden çok bileşenle kullanma

3 tekerleği kullanmak istiyorum UIPickerView - Geri kalan iki tekerleğin dizisini değiştirmek için 1. tekerlek didSelectRow değeri kullanılacaktır, ancak bunlar bir dönüşüm uygulamasıyla aynı olacaktır.

Anyobject'in String ile aynı olmadığını söyleyen tekerlekleri doldururken bana bir hata atıyor gibi görünüyor. Yanlış bir şey göremiyorum ama özlediğim temel bir şey olduğunu biliyorum.

Herhangi bir işaretçi çok takdir edilecektir.

Motty. Açıkça bir tür wheelContents vermezsen, Swift infers

var wheelContents:[[String]] = [] 

öyle NSArray olmak:

// ViewController.swift 
// picker test 

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate { 

    @IBOutlet weak var picker1Label: UILabel! 
    @IBOutlet weak var picker2Label: UILabel! 

    @IBOutlet weak var bigPicker: UIPickerView! 

    var wheelContents = [] 
    var length = ["metres","feet","yards","inches","mm","cm","miles"] 
    var volume = ["m3","US Gall","Imp Gall","Barrels", "cubic FT","litres"] 
    var conType = ["length","volume"] 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     wheelContents = [conType,length,length] 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    //For main selection of type of conversion 
    // returns the number of 'columns' to display. 
    func numberOfComponentsInPickerView(bigPicker: UIPickerView) -> Int{ 

     return wheelContents.count 

    } 

    // returns the # of rows in each component.. 
    func pickerView(bigPicker: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 

     return wheelContents[component].count 


    } 

    func pickerView(bigPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{ 

     return wheelContents[component][row] 

    } 
} 

cevap

1

Sen wheelContents dizisi String dizisi bir dizidir Swift anlatmak gerekir size problemler veriyor. Sınıfındaki Eğer temsilci idare çünkü

var wheelContents:[[String]] = [] 

Ayrıca self için pickerView delegesi belirlesin:

1

Sen wheelContents Dize diziler dizisi olduğunu, hızlı söylemek gerekir. Aksi takdirde düzgün çalışmaz:

//In the viewDidLoad method 
bigPicker.delegate = self 
+0

Çok teşekkürler pickerView ait veri kaynağı ayarlamanız gerekir (bu dizeleri diziler dizisi aka [[String]] var) –

1

onun unsurları türünü belirtmeden bu wheelContents = [] gibi wheelContents bildirdiğinden beri, derleyici otomatik olarak aka [AnyObject] AnyObjects dizisidir infers. derleyici bir String! bekliyor ancak bir AnyObject sağlıyoruz o an: Eğer wheelContents[component].count dönüyor zaman bir hata üretir nedeni bu

.

Bu gerçekten kolay bir çözümdür, yalnızca bildirdiğinizde dizinin içeriğinin ne olacağını belirtmeniz gerekir.

0

Sen viewDidLoad temsilci ile birlikte

pickerView.dataSource = self