2015-11-15 108 views
0

我有多個帶有UIPicker視圖和完成按鈕的文本框,但是UIPicker視圖不會在模擬器中呈現,也不會重新加載數據。多個UIPicker視圖不顯示或重新加載數據

import UIKit 

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{ 

@IBOutlet weak var RoomTypeTextField: UITextField! 

@IBOutlet weak var WindowTypeTextField: UITextField! 

@IBOutlet weak var ShelterTypeTextField: UITextField! 

// Room Type, Window Type and Shelter Variables 

//Room Type 

var RoomType = ["Bedroom", "Bathroom", "Sitting Room", "Hallway", "Dining Room", "Hallway", "Kitchen", "Conservatory"] 

var picker : UIPickerView! 

//Window Type 

var WindowType = ["Single Galzed", "Double galzed"] 

//Shelter Type 

var ShelterType = ["Sheltered", "Average", "Exposed"] 


//Done button for UIPickerView 

var toolBar = UIToolbar() 

var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: "doneUIPicker") 

var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 


override func viewDidLoad() { 
    super.viewDidLoad() 

    self.picker = UIPickerView(frame: CGRectMake(0, 200, view.frame.width, 100)) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: ("updatePicker"), name: UITextFieldTextDidBeginEditingNotification, object: nil) 

    func updatePicker(){ 

    self.picker.reloadAllComponents() 
    } 

    picker.backgroundColor = .whiteColor() 
    picker.showsSelectionIndicator = true 

    picker.delegate = self 
    picker.dataSource = self 

    toolBar.barStyle = UIBarStyle.Default 
    toolBar.translucent = true 
    toolBar.tintColor = UIColor(red: 75/255, green: 75/255, blue: 75/255, alpha: 1) 
    toolBar.sizeToFit() 

    toolBar.setItems([spaceButton, doneButton], animated: false) 
    toolBar.userInteractionEnabled = true 

    RoomTypeTextField.inputView = picker 
    WindowTypeTextField.inputView = picker 
    ShelterTypeTextField.inputView = picker 

    RoomTypeTextField.inputAccessoryView = toolBar 
    WindowTypeTextField.inputAccessoryView = toolBar 
    ShelterTypeTextField.inputAccessoryView = toolBar 
} 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 

     return 1 
    } 


    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

     if RoomTypeTextField.isFirstResponder() { 

      return RoomType.count 

     } else if WindowTypeTextField.isFirstResponder() { 

      return WindowType.count 

     } else if ShelterTypeTextField.isFirstResponder() { 

      return ShelterType.count 
     } 

     return 1 
} 

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

     if RoomTypeTextField.isFirstResponder() { 

      return RoomType[row] 

     } else if WindowTypeTextField.isFirstResponder() { 

      return WindowType[row] 

     } else if ShelterTypeTextField.isFirstResponder() { 

      return ShelterType[row] 
     } 

     return "" 
} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    if RoomTypeTextField.isFirstResponder() { 

     var itemselected = RoomType[row] 
     RoomTypeTextField.text = itemselected 

    } else if WindowTypeTextField.isFirstResponder() { 

     var itemselected = WindowType[row] 
     WindowTypeTextField.text = itemselected 

    } else if ShelterTypeTextField.isFirstResponder() { 

     var itemselected = ShelterType[row] 
     ShelterTypeTextField.text = itemselected 
} 

func doneUIPicker(){ 

    RoomTypeTextField.resignFirstResponder() 

    WindowTypeTextField.resignFirstResponder() 

    ShelterTypeTextField.resignFirstResponder() 
} 
} 
} 

回答

0

你必須寫在代碼 - (空)textfieldDidBeginEditing到reloadAllComponents。 我在目標C工作,所以不能給你示例代碼。但是這肯定會起作用。

繼承人的目的C.May示例代碼是它給你一個想法

-(void) textFieldDidBeginEditing:(UITextField *)textField 

    { 
     [Picker reloadAllComponents]; 
    }