2017-01-13 3 views
1

Meine aktuelle App funktioniert, wenn ich ein Textfeld angetippt habe, würde es die UIPickerView aufrufen, aber was ist, wenn ich ein Bild selbst angetippt habe (Geste wird über das Bild gelegt)?Zeige UIPickerView auf Geste Tapped

class SomeVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 
    @IBOutlet weak var inputLabel: UITextField! 
    @IBOutlet weak var laImageGestureTapped: UITapGestureRecognizer! 

    let demoPicker = UIPickerView() 

    // viewDidLoad() 
    inputLabel.inputView = demoPicker // All is well with this. 

    // How to open the UIPickerView with laImageGestureTapped? 

    // I have omitted the required functions for: numberOfRowsInComponent, viewForRow, didSelectRow, numberOfComponents etc 
} 

Bin ich searching with the correct words?

Alles, was ich will, ist, den Picker zu zeigen, wenn das Bild angetippt wird. Ich mache mir keine Sorgen um didSelectRow, da es ein verstecktes Label für x, y und z geben wird.

Wenn diese Frage bereits gestellt und beantwortet wurde, bitte mich anweisen. Vielen Dank.

+0

Anstatt einen GestenRecognizer an ein UIImageView angehängt zu haben, warum nicht einfach eine Schaltfläche mit einem Bild haben? – toddg

+0

@toddg Ein Button über dem Bild platziert? Das könnte funktionieren, aber ich habe es noch nie so gemacht. Lass mich sehen ... – Sylar

+0

Ja, das würde funktionieren. Oder Sie könnten einfach einen Knopf benutzen und das Knopfbild einstellen. – toddg

Antwort

1

Hier ist eine alternative Methode ein klares Textfeld über das Bild zu setzen:

  1. eine Schaltfläche erstellen, die Ihr Bild auf seine Hintergrundbild Eigenschaft
  2. initialisieren Ihre picker mit seinem Rahmen aus dem Bildschirm zugewiesen hat
  3. Erstellen Sie eine IBAction für Ihre Schaltfläche, die die PickerView auf dem Bildschirm aufruft und eine Tippgeste erstellt und fügt Ihre Ansicht hinzu
  4. Erstellen Sie die Methode, die die TAPH-Geste beim Auslösen aufrufen wird, von der Ihre PickerView zurück gesendet wird der Bildschirm

Hier ist der relevante Code:

class VC: UIViewController { 
    var pickerView = UIPickerView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    ... 
     pickerView = UIPickerView(frame: CGRect(x: 0, y: self.view.bounds.height, width: self.view.bounds.width, height: 100)) //Step 2 

    } 

    @IBAction func buttonPressed(sender: UIButton){ //Step 3 

     UIView.animate(withDuration: 0.3, animations: { 
      self.pickerView.frame = CGRect(x: 0, y: self.view.bounds.size.height - self.pickerView.bounds.size.height, width: self.pickerView.bounds.size.width, height: self.pickerView.bounds.size.height) 
    }) 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(doneWithPickerView)) 
     view.addGestureRecognizer(tapGesture) 

    } 

    func doneWithPickerView() { //Step 4 

     UIView.animate(withDuration: 0.3, animations: { 
      self.pickerView.frame = CGRect(x: 0, y: self.view.bounds.size.height, width: self.pickerView.bounds.size.width, height: self.pickerView.bounds.size.height) 
     }) 
    } 
} 

Ich denke, es ist in der Regel eine bessere Praxis ist nicht unsichtbar Ansichten zu verwenden, da sie Schwierigkeiten für später verursacht werden. Hoffe das hilft.

+0

Das könnte auch funktionieren. Vielen Dank. – Sylar

+0

@Sylar kein Problem :) –