2017-09-19 6 views
1

Ich schreibe eine Anwendung in Swift 3.0 mit xCode.Mit Swift, wie kann ich die Tastatur deaktivieren?

Wenn ich eine Textbox drücke, möchte ich nur die Picker-Ansicht anzeigen; Also, warum zeigt die Tastatur damit? Wie kann ich das Popup deaktivieren?

Hier ist das iPhone, ohne die Textbox zu berühren: picture one

Hier ist das iPhone, wenn ich die Textbox berühren:

picture two

Hier ist mein Code für den View-Controller:

//the arrays for the height textbox 
var heightInFeet = ["4\' 8\"", "4\' 9\"", "4\' 10\"", "4\' 11\"", "5\'", "5\' 1\"", "5\' 2\"", "5\' 3\"", "5\' 4\"", "5\' 5\"", "5\' 6\"", "5\' 7\"", "5\' 8\"", "5\' 9\"", "5\' 10\"", "5\' 11\"", "6\'", "6\' 1\"", "6\' 2\"", "6\' 3\"", "6\' 4\"", "6\' 5\"", "6\' 6\"", "6\' 7\"", "6\' 8\""] 
var heightInMeters = ["1.42", "1.44", "1.46", "1.48", "1.5", "1.52", "1.54", "1.56", "1.58", "1.6", "1.62", "1.64", "1.66", "1.68", "1.7", "1.72", "1.74", "1.76", "1.78", "1.8", "1.82", "1.84", "1.86", "1.88", "2.0", "2.2"] 
var pickerArray = [String]() 

//the array for the activity level textbox 
var activityLevel = ["None/Sedentary", "Light/Low", "Moderate/Active", "High/Very Active"] 

...

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    var countrows : Int = pickerArray.count 

    if pickerView == pickerViewForActivityLevel{ 
     countrows = self.activityLevel.count 
    } 
    return countrows 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if pickerView == pickerViewForHeight{ 
     let titleRowForHeight = pickerArray[row] 
     return titleRowForHeight 
    } 
    else if pickerView == pickerViewForActivityLevel{ 
     let titleRowForActivityLevel = activityLevel[row] 
     return titleRowForActivityLevel 
    } 
    return "" 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if pickerView == pickerViewForHeight{ 
     self.heightTextBox.text = self.pickerArray[row] 
     self.pickerViewForHeight.isHidden = true 
    } 
    else if pickerView == pickerViewForActivityLevel{ 
     self.activityLevelTextBox.text = self.activityLevel[row] 
     self.pickerViewForActivityLevel.isHidden = true 
    } 
} 

func textFieldDidBeginEditing(_ textField: UITextField) { 
    if (textField == self.heightTextBox){ 
     self.pickerViewForHeight.isHidden = false 
    } 
    else if (textField == self.activityLevelTextBox){ 
     self.pickerViewForActivityLevel.isHidden = false 
    } 
} 

@IBAction func heightSwitchAction(_ sender: UISwitch) { 
    if heightUnitsSwitch.isOn{ 
     heightUnits.text = "Feet (ft)" 
     pickerArray = [] 
     pickerArray.append(contentsOf: heightInFeet) 
    } 
    else{ 
     heightUnits.text = "Meters (m)" 
     pickerArray = [] 
     pickerArray.append(contentsOf: heightInMeters) 
    } 
} 

Vielen Dank im Voraus.

+0

Deaktivieren Sie das Kontrollkästchen Benutzerinteraktion aktiviert. –

+2

Haben Sie die Picker-Ansicht als "inputView" des Textfelds festgelegt? – rmaddy

Antwort

1

Try inputView UIView() als inputView textField.inputView = UIView()

+1

Warum sollten Sie die 'inputView' auf etwas anderes als die Auswahlansicht setzen? – rmaddy

+0

, weil er vielleicht wegen seines UI-Designs pickerView nicht als Eingabeansicht festlegen möchte. Und er möchte nur die Tastatur verstecken, weil er bereits eine benutzerdefinierte Logik in seiner PickerView (_ PickerView: UIPickerView, didSelectRow Zeile) hat –

0

Wenn der Wert in diesem inputView nil ist, das Textfeld zeigt die Standard-Systemtastatur zu setzen, wenn es Ersthelfer wird. Wenn Sie custom view diesem inputView zuweisen, wird diese Ansicht stattdessen angezeigt. Der Standardwert dieser Eigenschaft ist nil.so können Sie inputView zum Anzeigen der Auswahl verwenden.

let picker : UIDatePicker = UIDatePicker() 
textField.inputView = picker 
Verwandte Themen