Я пытаюсь создать UIPickerView программно и отобразить его ряды в листе действий. Однако ничего не работает. Вот упрощенный пример подобного неработающего кода:UIPickerView в листе действий UIAlertController не отображает никаких данных
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
let array = ["one","two","three","four","five"]
var controller: UIAlertController?
var pickerView = UIPickerView(frame: CGRectMake(0, 15, 304, 0))
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
controller = UIAlertController(title: "Choose Category", message: "\n\n\n\n\n\n\n\n", preferredStyle: .ActionSheet)
let doneAction = UIAlertAction(title: "Done", style: .Default, handler: nil)
controller!.addAction(doneAction)
pickerView.delegate = self
pickerView.dataSource = self
}
@IBAction func buttonPressed(sender: AnyObject) {
controller!.view.addSubview(self.pickerView)
self.presentViewController(controller!, animated: true, completion: nil)
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array.count
}
func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 50.0
}
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
let view = UIView(frame: CGRectMake(0, 0, 100, 70))
let label = UILabel(frame: CGRectMake(50, 5, 100, 60))
label.text = array[row] as String
view.insertSubview(label, atIndex: 1)
return view
}
}
Когда кнопка нажата, это выход:
Как вы можете видеть, лист действие не является заполненный значениями массива. Все это работало должным образом, прежде чем я обновился до iOS 9 и Swift 2.0. Я использовал print
, чтобы убедиться, что методы pickerView вызываются, какие они есть, и даже используя print
, чтобы проверить значение label
и view
, и они есть. Может ли кто-нибудь либо направлять меня в направлении, либо объяснять, что не может быть отображено?
Также: Еще одна напуганная вещь - как эти методы называются. Если я нажимаю на кнопку один раз, это порядок каждого вызова метода, что происходит:
numberOfComponentsInPickerView:
numberOfComponentsInPickerView:
rowHeightForComponent:
rowHeightForComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfComponentsInPickerView:
numberOfRowsInComponent:
viewForRow:
viewForRow:
numberOfComponentsInPickerView:
rowHeightForComponent:
rowHeightForComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
numberOfRowsInComponent:
viewForRow:
viewForRow:
viewForRow:
viewForRow:
viewForRow:
Где код, который добавляет представление подбора к оповещению? Где код, представляющий предупреждение? – rmaddy
Я забыл эту строку, но я только что отредактировал и добавил ее. Добавление происходит в buttonPressed action. – Aaron
Попробуйте увеличить значение 'y' в представлении представления выбора, пока оно не появится. Конечно, вы понимаете, что то, что вы делаете, не поддерживается, не так ли? В документах для 'UIAlertController' четко указано: * Иерархия представления для этого класса является частной и не должна быть изменена. * – rmaddy