2016-05-29 13 views
5

Uczę się Swift, tworząc aplikację na iPhone'a. Problem, który napotykam, polega na implementacji UIPickerView. Mam przycisk, który powinien, jeśli został naciśnięty, sprawić, by UIPickerView wznosił się od dołu ekranu do ustawionej długości nad widokiem głównym. Następnie, gdy użytkownik wybierze element z UIPickerView, UIPickerView schodzi z widoku głównego, dopóki nie zostanie ponownie wywołany.Jak zrobić wzrost UIPickerView od dołu aplikacji po naciśnięciu przycisku?

Dobrym przykładem tego, co próbuję replikować, jest dodanie alarmu w aplikacji Zegar, bez widoku zasłaniającego wszystko bez etykiety i bez przełączników.

Chciałbym również, aby wybrane przeze mnie elementy z wyzwalacza PickerView spełniały funkcję, ale myślę, że to będzie po tym, jak minie tę przeszkodę.

Oto odpowiedni kod, który mam do tej pory.

@IBOutlet weak var pickerContainer: UIView! 
@IBOutlet weak var pickerView: UIPickerView! 
let picker_values = ["val 1", "val 2", "val 3", "val 4"]; 
    override func viewDidLoad() { 
    super.viewDidLoad() 

} 


@IBAction func buttonPressed(sender: AnyObject) { 
    print("pressing a die!"); 

} 

Z góry dziękuję!

Odpowiedz

7

Ok można to zrobić za pomocą UITextField

Krok 01: -

Dodaj UITextField.Select wsiąść stylu niewidoczny i ustawić kolor odcień biały/jasny kolor. enter image description here

enter image description here

Etap 02: -

Następnie dodać UIButton na górze UITextField dodać taką samą wysokość i szerokość jest hierarchia constraints.Here płyta Stroy,

enter image description here

Krok 03: -

Następnie podłącz przycisk i TextField do tej funkcji klasę: -

przycisk Connect na tym jednym @IBAction FUNC (Sender: AnyObject) i podłączyć do @IBAction UITextField funk textField (Nadawca: UITextField).

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate { 

@IBOutlet weak var textFeild: UITextField! 
let picker_values = ["val 1", "val 2", "val 3", "val 4"] 
var myPicker: UIPickerView! = UIPickerView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.myPicker = UIPickerView(frame: CGRectMake(0, 40, 0, 0)) 
    self.textFeild.delegate = self 
    self.myPicker.delegate = self 
    self.myPicker.dataSource = self 
    // Do any additional setup after loading the view, typically from a nib. 
} 

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

//MARK: - Delegates and data sources 

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 
} 
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return picker_values.count 
} 

//MARK: Delegates 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return picker_values[row] 
} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    //Your Function 
    print("Hello") 
} 

@IBAction func button(sender: AnyObject) { 
    self.textFeild.becomeFirstResponder() 
} 

func cancelPicker(sender:UIButton) { 
    //Remove view when select cancel 
    self.textFeild.resignFirstResponder() // To resign the inputView on clicking done. 
} 

@IBAction func textField(sender: UITextField) { 
    //Create the view 
    let tintColor: UIColor = UIColor(red: 101.0/255.0, green: 98.0/255.0, blue: 164.0/255.0, alpha: 1.0) 
    let inputView = UIView(frame: CGRectMake(0, 0, self.view.frame.width, 240)) 
    myPicker.tintColor = tintColor 
    myPicker.center.x = inputView.center.x 
    inputView.addSubview(myPicker) // add date picker to UIView 
    let doneButton = UIButton(frame: CGRectMake(100/2, 0, 100, 50)) 
    doneButton.setTitle("Done", forState: UIControlState.Normal) 
    doneButton.setTitle("Done", forState: UIControlState.Highlighted) 
    doneButton.setTitleColor(tintColor, forState: UIControlState.Normal) 
    doneButton.setTitleColor(tintColor, forState: UIControlState.Highlighted) 
    inputView.addSubview(doneButton) // add Button to UIView 
    doneButton.addTarget(self, action: "doneButton:", forControlEvents: UIControlEvents.TouchUpInside) // set button click event 

    let cancelButton = UIButton(frame: CGRectMake((self.view.frame.size.width - 3*(100/2)), 0, 100, 50)) 
    cancelButton.setTitle("Cancel", forState: UIControlState.Normal) 
    cancelButton.setTitle("Cancel", forState: UIControlState.Highlighted) 
    cancelButton.setTitleColor(tintColor, forState: UIControlState.Normal) 
    cancelButton.setTitleColor(tintColor, forState: UIControlState.Highlighted) 
    inputView.addSubview(cancelButton) // add Button to UIView 
    cancelButton.addTarget(self, action: "cancelPicker:", forControlEvents: UIControlEvents.TouchUpInside) // set button click event 
    sender.inputView = inputView 
} 

} 

Przy okazji upewnić się, że UITextField wysłał zdarzenie jest "Edit zaczęła" Jak to: -

enter image description here

nadzieję, że to będzie pomóc ...

+0

pracował dla mnie! –

3
  • Utwórz UIPickerView z ramą jako CGRectZero
  • Utwórz UITextFie ld.
  • Ustaw pole tekstowe ukryte.
  • Utwórz UIButton.
  • Kliknięcie przycisku, wywołanie textField.becomeFirstResponder()

To wszystko!

Powiązane problemy