2016-02-11 84 views
1

我在使用Swift 2的Xcode 7中工作。選擇選項/關閉沒有按鈕的UIPickerView時更新TextFields?

我在文本字段中設置了我的UIPickerViews設置,它們都按照它們應該的方式工作。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    pickerOptions.resignFirstResponder() 
    (etc.) 
} 

我的問題是,我有我想成爲一個「預設」菜單將沒有選擇pickerview值更新一組值的3個常規文本框輸入一個pickerview:我使用關閉pickerviews需要用按鈕更新值。我不完全相信如何去做這件事,因爲我對代表還不是很熟悉(如果它甚至涉及他們的話)。我真的很想知道如何更新/刷新ViewController。

我猜想,這有什麼用textFieldDidEndEditing做(因爲我有這些類從建立UIPickerView已經設置:UIPickerViewDataSourceUIPickerViewDelegateUITextFieldDelegate)任何幫助表示讚賞:)

回答

0

你可以實現委託方法:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    //put your code here 
} 

屬於UIPickerViewDelegate協議。

要查看XCode option上的協議文檔,請單擊協議名稱。

1

這一切都是關於代表。我知道你有一個pickerView應該在用戶選擇時設置一些textFields的內容。 pickerView是一個股票對象,它需要告訴你的班級發生了什麼,而不知道你的班級有什麼具體的事情。它是這樣做的,如果你實現了我定義的協議,那麼我會打電話給你的函數讓你知道。在pickerView的情況下,相關的協議是UIPickerViewDelegate,並且它公開了一個名爲delegate的屬性,該屬性只能設置爲實現該協議的對象。如果pickerView的委託被設置,當用戶滾動pickerView時,它將調用該對象的pickerView:didSelectRow:inComponent:函數。

您只需創建一個符合UIPickerViewDelegate協議的對象,並相應地設置pickerView的delegate屬性。更多的,往往不是你只會增加這種能力你的viewController,沿着線:

class viewController: UIViewController, UIPickerViewDelegate { 
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     // Now you can update the textField(s) 
    } 
} 

注意的pickerView:didSelectRow:inComponent:定義被標記爲可選。這意味着如果你說你實現了UIPickerViewDelegate,但沒有定義它,編譯器不會讓你知道。如果你不小心拼錯了它或者弄錯了簽名,這可能會讓你感到困惑 - 你會認爲它已被定義,但它永遠不會被調用。