Одна из возможностей состоит в том, чтобы наложить надзору (объект UIView) (с помощью кнопки выбора даты и сделанной кнопки) поверх вашей таблицы. Затем используйте скрытую функцию subview, чтобы скрыть/показать представление. Ниже приведен пример диспетчера tableview. При настройке раскадровки убедитесь, что подвью имеет ограничения компоновки, поэтому выбор даты правильно установлен. Я использовал «разрешение авто макет вопросов», и он работал хорошо. Если вы не выполняете специальную обработку, subview будет располагаться в нижней части строк. Если у вас много строк, aubview будет полностью обрезан или скрыт. Поэтому лучше расположить subview по отношению к нижней части страницы в вашем макете авто.
Вот простой пример, который хорошо сработал для меня. В viewDidLoad скрыто скрыто. Когда вы нажмете на любую строку, вы увидите подвью и дату. Когда вы нажмете кнопку, это снова скроет subview.
import UIKit
класс TableViewController: UITableViewController {
@IBAction func doneButton(sender: UIButton) {
// process the date using datePickerOutlet properties
subView.hidden = true // hide the subview and its components
}
@IBOutlet weak var subView: UIView!
@IBOutlet weak var datePickerOutlet: UIDatePicker!
@IBAction func datePicker(sender: UIDatePicker) {
}
override func viewDidLoad() {
super.viewDidLoad()
subView.hidden = true // hide the subview and its components
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("\(indexPath.row)")
subView.hidden = false // show the subview and its components
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel!.text = "\(indexPath.row)"
return cell
}
}
Вы имеете в виду занимает всю ширину экрана? Сборщики делают это. Вы можете немного изменить ширину, но немного. Вы можете просто подумать о скольжении/сеге на другом экране, хотя руководство по интерфейсу пользовательского интерфейса препятствует переходу на новый экран, чтобы ответить на выбор даты, но они в конце концов оставляют это до разработчика. Вы также можете рассмотреть ввод данных на основе текста. Даже текстовое поле, которое имеет все виды проверок проверки, но это не легко интернационализируется. Если вы имеете в виду, что он занимает все вертикальное пространство, вам нужно ограничить и/или устранить ограничения в представлении выбора. – clearlight
Извините - я имею ввиду, что снизу открывается снизу, но она занимает всю высоту экрана (а также ширину, но я хочу, чтобы она была шириной экрана). – Max
Вы используете автозапуск? Это программно создано или через Interface Builder? Вы добавили вертикальные ограничения? Вы знакомы с автозапуском и созданием ограничений? Если нет, вам действительно нужно это изучить. Не только для того, чтобы вы могли вырвать волосы, а потому, что это очень умный механизм, который очень хорошо работает, когда вы привыкаете к нему. – clearlight