Początkowo chciałem dodać ukryty UIPickerView na Main.storyboard obok mojego istniejącego UISearchBar i po kliknięciu BarButtonItem, powinien wyświetlić się UIPickerView; ale wydaje się, że nie mogę mieć ich obu naraz na danej przestrzeni.Swift - programowo tworzyć i wyświetlać UIPickerView po naciśnięciu BarButtonItem
Zamiast tego moją najlepszą alternatywą było stworzenie go programowo. I już po istniejących tutoriali (http://sourcefreeze.com/ios-uipickerview-example-using-swift/) i podobne pytania (Programmatically Create and Show UIPickerView) i wydaje się, że ja mam UIPickerView jako opis jest ona drukowana i uzyskać następujące (?):
<UIPickerView: 0x7f86425b1fb0; frame = (100 100; 100 162); layer = <CALayer: 0x7f8642543a20>>
Oto część mojego aktualnego kodu, które mogą być pomocne:
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)
}
}
proszę mógłbyś mi pomóc wyświetlić programowo stworzony UIPI ckerView po naciśnięciu BarButtonItem? Jeśli masz więcej pytań, proszę zapytaj.
Wielkie dzięki.
Czy możesz pokazać mi przykład? Ponieważ nie jestem całkowicie pewien, co przez to rozumiesz. Czy chcesz, abym dodał go do ViewController? Chociaż jest deklarowany w TableViewController. Dzięki – Javz
@Javz Zaktualizowałem swoją odpowiedź kodem, aby Ci pokazać. – pbush25
Nie mogę uwierzyć, że przegapiłem coś tak prostego ..... Wielkie dzięki! – Javz