2015-10-08 15 views
6

Ban đầu tôi muốn thêm một UIPickerView ẩn vào Main.storyboard cùng với UISearchBar hiện tại của tôi và khi một BarButtonItem được nhấp, UIPickerView sẽ được hiển thị; nhưng có vẻ như tôi không thể có cả hai cùng một lúc trong một không gian nhất định.Swift - Lập trình tạo và hiển thị UIPickerView khi BarButtonItem được nhấn

Vì vậy, thay vào đó, lựa chọn tốt nhất của tôi là tạo lập trình theo cách lập trình. Tôi đã theo hướng dẫn hiện hành (http://sourcefreeze.com/ios-uipickerview-example-using-swift/) và các câu hỏi tương tự (Programmatically Create and Show UIPickerView) và có vẻ như tôi có một UIPickerView như mô tả của nó đang được in và tôi nhận được như sau (?):

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

Dưới đây là một phần mã hiện tại của tôi có thể được giúp đỡ:

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

} 

Xin vui lòng bạn có thể giúp tôi hiển thị UIPi lập trình tạo ra ckerView khi BarButtonItem được nhấn? Nếu bạn có thêm bất kỳ câu hỏi nào, vui lòng hỏi.

Rất cám ơn.

Trả lời

5

Bạn không bao giờ thêm pickerView làm tiểu sử của ViewController, mà bạn có thể thực hiện trong viewDidLoad() vì bạn đang ẩn nó. Sau đó, khi bạn bỏ ẩn, chế độ xem của bạn sẽ ở đó.

EDIT: nhập Mã

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 
} 

Với đoạn mã trên, bây giờ khi bạn thôi ẩn nó trên nút nhấn view sẽ hiển thị.

+0

Bạn có thể cho tôi xem ví dụ không? Vì tôi không hoàn toàn chắc chắn ý bạn là gì. Bạn có muốn tôi thêm nó vào ViewController không? Mặc dù nó đang được khai báo trên TableViewController. Cảm ơn – Javz

+0

@Javz Tôi đã cập nhật câu trả lời của mình bằng mã để hiển thị cho bạn. – pbush25

+0

Tôi KHÔNG THỂ tin rằng tôi đã bỏ lỡ một cái gì đó rất đơn giản ..... Cảm ơn rất nhiều !! – Javz

Các vấn đề liên quan