Добавить кнопку поверх UITableViewController (Swift)
Я пытаюсь добавить кнопку ontop в виде таблицы просмотра uitableview. Контроллер представления имеет контроллер навигации и статические ячейки, поэтому он является управляющим устройством, а не uiviewcontroller. Теперь я пытаюсь добавить кнопку в нижней части экрана, которая прикреплена к контроллеру навигации, чтобы она не прокручивалась с видом таблицы.
Я пытаюсь сделать что-то похожее на то, что ниже. Он имеет контроллер навигации для верхней панели, табличный вид со статическими ячейками и затем кнопку, но как они сделали кнопку?
Изображение: http://postimg.org/image/ilsmqqrip/
Спасибо!
UPDATE: как я могу использовать uiviewcontroller с табличным представлением со статическими ячейками с помощью Swift?
Ответы
Ответ 1
Я нахожу Container Views очень полезным в этом сценарии! Чистое решение и очень легко реализовать.
Просто создайте обычный UIViewController, добавьте свою кнопку и ContainerView в качестве подзадач этого UIViewController (средний на изображении ниже). Наконец, создайте Embed Segue из ContainerView в свой UITableViewController (тот, который находится справа).
![Раскадровка]()
Таким образом, вы можете использовать прототипы статических ячеек, не ограничиваясь только UITableView в то же время.
Результат:
![Результат]()
Ответ 2
Я сделал что-то подобное с UITableViewController
и статическим источником данных. Я добавил кнопку в моем представлении таблицы.
Чтобы сделать его выровненным в нижней части экрана, мне нужен этот код в моем диспетчере просмотра:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Make footerview so it fill up size of the screen
// The button is aligned to bottom of the footerview
// using autolayout constraints
self.tableView.tableFooterView = nil
self.footerView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.tableView.frame.size.height - self.tableView.contentSize.height - self.footerView.frame.size.height)
self.tableView.tableFooterView = self.footerView
}
Вкратце, я изменяю размер footerview, чтобы заняться всем оставшимся пространством после удаления содержимого содержимого таблицы. Поскольку кнопка выровнена в нижней части footerView с автозапуском, она останется в нижней части экрана.
Раскадровка:
![Storyboard]()
Вот результат:
![simulator]()
Ответ 3
есть лучшее решение для этого. Вы можете сделать это, отключив свойство Auto Layout (button.translatesAutoresizingMaskIntoConstraints = false) соответствующей кнопки или любого UIView для плавающей кнопки:
Swift 4
//create a button or any UIView and add to subview
let button=UIButton.init(type: .system)
button.setTitle("NEXT", for: .normal)
button.frame.size = CGSize(width: 100, height: 50)
self.view.addSubview(button)
//set constrains
button.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0, *) {
button.rightAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.rightAnchor, constant: -10).isActive = true
button.bottomAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.bottomAnchor, constant: -10).isActive = true
} else {
button.rightAnchor.constraint(equalTo: tableView.layoutMarginsGuide.rightAnchor, constant: 0).isActive = true
button.bottomAnchor.constraint(equalTo: tableView.layoutMarginsGuide.bottomAnchor, constant: -10).isActive = true
}
Ответ 4
UITableViewController займет все пространство, поэтому вы не сможете добавить кнопку. Обновите свой код на основе UITableViewController в UIViewController с добавлением UITableView вручную. Таким образом, вы сможете установить размер вашего вида таблицы и поместить кнопку в нижнюю часть.
Ответ 5
К сожалению, UITableViewController имеет представление tableView в виде верхнего уровня. Конечно, если вы посмотрите в отладчик вида, вы увидите, что tableview не является корневым представлением. Поэтому вы можете добавлять кнопки в окно tableView программно. Если вам нужно сделать это после факта, это, вероятно, самый простой способ добавить элемент верхнего уровня над UITableViewController. В противном случае, если вы делаете это в первоначальном проекте, вы можете использовать вид контейнера для своих кнопок и UITableViewController для TableView. Недостатком этого подхода является то, что вы получаете два контроллера представления: один для контейнера и один для таблицы, а также часто необходимо передавать информацию обратно и между ними. Если вы используете swift, вы можете упростить это, вставив tableViewcontroller внутри класса контроллера контейнера.
Если вы хотите добавить кнопку в окно, вы можете сделать это лениво, как только убедитесь, что в окне есть окно. Обратите внимание, что кнопки относятся к окну, а не к контроллеру представления, поэтому его ответственность заключается в том, чтобы удалить их, когда контроллер вида исчезает.
private weak var button: UIButton!
...
override func didMove(toParentViewController parent: UIViewController?) {
super.didMove(toParentViewController: parent)
guard self.button == nil, let window = tableView.window else {
return
}
let button = UIButton(frame: CGRect(x:0, y:40, width: 200, height: 20))
button.setTitle("This is a red button", for: .normal)
button.backgroundColor = UIColor.red
window.addSubview(button)
self.button = button
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
button?.removeFromSuperview()
}
Ответ 6
все, что вам нужно сделать, это добавить ваш вид сверху, в зависимости от того, какой он есть, в navigationController.view
примерно так:
self.navigationController?.view.addSubview(YOUR_TOP_VIEW)
так что если вам нужна липкая кнопка/представление и т.д. поверх TableViewController, который не прокручивается с tableView, используйте этот подход.
Ответ 7
Вот UIViewController, с UITableView, добавленным как subview. В правом верхнем углу вы видите раскрывающееся меню, в котором указано Content: Dynamic Prototypes. Измените его на статические ячейки. ![enter image description here]()