2016-08-16 20 views
2

我嘗試爲此找到一個示例,但所有半相關示例似乎都使用靜態數據作爲UIPickerView,這不適合我的情況。如何使UIPickerView中的第一項空白

我有一個UIPickerView對象,它從數據庫中獲取其數據(在這種情況下是核心數據) - 選擇器與文本字段相關聯。目標是能夠從選取器中選擇現有條目,或者能夠創建一個新條目,以便在下次運行應用程序時將其添加到選取器中。在一般情況下,這是所有工作正常 - 除了一個部分:當應用程序首次加載,則文本字段爲空白(期望),但選擇器視圖顯示所選擇的第一現有的值(期望

如何在選擇器的開頭添加一個空白條目而不在數據庫中存在這樣的條目?

我嘗試添加下面我viewDidLoad(),但它似乎沒有任何區別:

picker.selectRow(-1, inComponent: 0, animated: false) 

回答

2

嘗試這樣的事:

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    let entries = ["First", "Second", "Third"] 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return entries.count + 1 // +1 for the empty entry 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return row == 0 ? "" : entries[row - 1] 
    } 

} 
+0

不幸的是,這似乎留給我一個前被拋出:'2016-08-16 18:02:11.955 CoreDataDemo [9829:1237496] ***由於未捕獲的異常'NSRangeException',原因:'*** - [__ NSArrayI objectAtIndex:]:index 3 [0..2]'' - 某處'行'的減量似乎沒有正確發生 –

+0

我將更新原始文章以顯示更多代碼... –

+0

我找出問題出在哪裏 - 所以你提出的解決方案**可以工作 - 非常感謝! –

0

感謝安德烈 - 生成的代碼工作(我擺脫了picker.selectRow(-1, inComponent: 0, animated: false)):

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    let rows = _getNumDataRows() // I had reasons for pulling this out 
    return rows + 1 // <<<=== MODIFIED AS PER SUGGESTION 
} 

func _getNumDataRows() -> Int { 
    let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedObjectContext) 

    let request = NSFetchRequest() 
    request.entity = entityDescription 

    do { 
     let results = try managedObjectContext.executeFetchRequest(request) 
     return results.count 
    } 
    catch let error as NSError { 
     status.text = error.localizedFailureReason 
    } 
    print("UNABLE TO FIND ROWS") 
    return 0 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return row == 0 ? "" : _getSelectedValue(row - 1) // <<<=== MODIFIED AS PER SUGGESTION 
} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    name.text = row == 0 ? "" : _getSelectedValue(row - 1) // <<<=== MODIFIED AS PER SUGGESTION 
} 

func _getSelectedValue(row: Int) -> String { 
    print("Selected Row: \(row)") 
    let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedObjectContext) 

    let request = NSFetchRequest() 
    request.entity = entityDescription 

    do { 
     let results = try managedObjectContext.executeFetchRequest(request) 
     return results[row].valueForKey("name") as! String 
    } 
    catch let error as NSError { 
     status.text = error.localizedFailureReason 
    } 
    print("NO RECORDS FOUND") 
    return "" 

} 
相關問題