2015-10-08 8 views
6

最初は、隠したUIPickerViewを既存のUISearchBarと一緒にMain.storyboardに追加したいのですが、BarButtonItemをクリックするとUIPickerViewが表示されます。私は与えられた空間でそれらを一度に持つことはできないようです。Swift - BarButtonItemが押されたときにUIPickerViewをプログラムで作成して表示する

代わりに、私の最善の選択肢は、プログラムでそれを作成することでした。私は既存のチュートリアル(http://sourcefreeze.com/ios-uipickerview-example-using-swift/)と似た質問(Programmatically Create and Show UIPickerView)に続き、それについての説明が印刷されているように私はUIPickerViewを持っていないように思えるし、私は次の取得しました(?):

ここ
<UIPickerView: 0x7f86425b1fb0; frame = (100 100; 100 162); layer = <CALayer: 0x7f8642543a20>> 

がその一部であります助けになることがあり、私の現在のコードの:

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) 
    } 

} 

あなたは私のプログラムで作成UIPIを表示助けることができるしてくださいBarButtonItemを押すとckerView?これ以上質問がある場合は、質問してください。

多くのありがとうございます。

答えて

5

ViewControllerのサブビューとしてpickerViewを追加することはありません。あなたはそれを隠しているので、viewDidLoad()で行うことができます。あなたがそれを隠すとき、あなたの意見はそこにあるはずです。

編集:上記のコードで追加コード

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.typePickerView.hidden = true 
    //other pickerView code like dataSource and delegate 
    self.view.addSubview(pickerView) //will add the subview to the view hierarchy 
} 

ボタンを押し上でそれを再表示するとき、今すぐビューが表示されます。

+0

私に例を教えてください。私はあなたがそのことによって何を意味するかは完全には分かっていません。それをViewControllerに追加したいですか?それはTableViewControllerで宣言されていますが。ありがとう – Javz

+0

@ Javz私はあなたのために私の答えをコードで更新しました。 – pbush25

+0

私はとてもシンプルなものを逃したとは信じられません.....ありがとう! – Javz

関連する問題