Ursprünglich wollte ich eine versteckte UIPickerView auf der Main.storyboard neben meiner vorhandenen UISearchBar hinzufügen und wenn ein BarButtonItem angeklickt wird, sollte die UIPickerView angezeigt werden; aber es scheint, ich kann sie nicht beide auf einmal in einem gegebenen Raum haben.Swift - UIPickerView programmgesteuert erstellen und anzeigen, wenn BarButtonItem gedrückt wird
Also, stattdessen war meine beste Alternative, es programmgesteuert zu erstellen. Ich habe vorhandenen Tutorials gefolgt (http://sourcefreeze.com/ios-uipickerview-example-using-swift/) und ähnliche Fragen (Programmatically Create and Show UIPickerView) und scheint, wie ich habe eine UIPickerView als die Beschreibung davon gedruckt wird, und ich bekomme die folgende (?):
<UIPickerView: 0x7f86425b1fb0; frame = (100 100; 100 162); layer = <CALayer: 0x7f8642543a20>>
Hier ist ein Teil meiner aktuellen Code, der von Hilfe sein kann:
AnimalTableViewController.swift
import UIKit
class AnimalTableViewController: UITableViewController, UINavigationControllerDelegate, UISearchBarDelegate, UISearchDisplayDelegate, UISearchResultsUpdating, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet var segmentedSortOption: UISegmentedControl!
var array : NSArray = Animal.animalStruct.jsonResult["animal"] as NSArray
var filteredArray = [[String:AnyObject]]()
var timer = NSTimer()
var counter:Int = 1
var typePickerView: UIPickerView = UIPickerView()
@IBOutlet var typeBarButton: UIBarButtonItem!
var resultSearchController = UISearchController()
var indexArray:String!
@IBAction func refresh(sender: AnyObject) {
self.tableView.reloadData()
println("refreshed")
}
override func viewDidLoad() {
super.viewDidLoad()
self.typePickerView.hidden = true
self.typePickerView.dataSource = self
self.typePickerView.delegate = self
self.typePickerView.frame = CGRectMake(100, 100, 100, 162)
self.typePickerView.backgroundColor = UIColor.blackColor()
self.typePickerView.layer.borderColor = UIColor.whiteColor().CGColor
self.typePickerView.layer.borderWidth = 1
timer = NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: Selector("result"), userInfo: nil, repeats: true)
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return array[row]["type1"] as String
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
typeBarButton.title = array[row]["type1"] as? String
typePickerView.hidden = false
}
func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
return 36.0
}
func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 36.0
}
@IBAction func typePickerViewSelected(sender: AnyObject) {
typePickerView.hidden = false
println(typePickerView.description)
}
}
Bitte könnten Sie mir helfen, die programmatisch erstellt UIPI anzuzeigen ckerView, wenn das BarButtonItem gedrückt wird? Wenn Sie weitere Fragen haben, fragen Sie bitte.
Vielen Dank.
Können Sie mir bitte ein Beispiel zeigen? Da bin ich mir nicht ganz sicher, was du damit meinst. Möchten Sie, dass ich es zum ViewController hinzufüge? Obwohl es auf dem TableViewController deklariert ist. Danke – Javz
@Javz Ich habe meine Antwort mit Code aktualisiert, um Sie zu zeigen. – pbush25
Ich kann es nicht glauben, dass ich etwas so einfach verpasst habe ..... Vielen Dank !! – Javz