Я знаю, я знаю, что это было задано лот раз. Я также нашел this question, но решение, которое оно предложило, не сработало для меня.Как добавить segue программно?
Я просто пытаюсь создать приложение, чтобы продемонстрировать, как использовать эти вещи в UIKit
(в случае, если я хочу использовать их позже. Я могу просто скопировать код).
Я создал контроллер View с табличным представлением в нем. Я написал класс под названием PrototypeTableController
, чтобы действовать как класс контроллера вида для контроллера вида, созданного в раскадровке.
Когда пользователь нажимает на одну из ячеек, я хочу показать другой контроллер вида, который называется Prototype Table Content
. И другой текст будет показан, если вы нажмете на разные ячейки.
В раскадровке, это так:
Текст этикетки в Prototype Table Content
будет отличаться, когда пользователь нажимает на другую ячейку. Это означает, что мне нужно отправить данные с одного контроллера представления на другой.
Сообщение упоминалось выше предположение, что я должен дать SEGUE идентификатор, так что я сделал:
Вот мой код:
Посмотреть класс контроллера для представления таблицы:
class PrototypeTableController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let data = ["Cell1", "Cell2", "Cell3", "Cell4", "Cell5"]
let contents = ["Hello", "Nice", "OMG", "Jesus", "Peace"]
var content: String?
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = data[indexPath.row]
return cell
}
func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? {
return "This is a prototype table view created by Sweeper"
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "my table"
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
content = contents[indexPath.row]
tableView.deselectRowAtIndexPath(indexPath, animated: true)
performSegueWithIdentifier("showContent", sender: tableView)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showContent" {
let destination = segue.destinationViewController as! PrototypeTableContentViewController
destination.contentString = content
}
}
}
Просмотреть класс контроллера для Prototype Table Content
вид:
class PrototypeTableContentViewController: UIViewController {
@IBOutlet var tableContent: UILabel!
var contentString: String?
override func viewDidLoad() {
super.viewDidLoad()
tableContent.text = contentString
}
}
Я думаю, что сделал все, что было предложено в упомянутом выше сообщении. Я добавил идентификатор, я вызвал performSegueWithIdentifier
, я также снял выделение с ячейки после нажатия.
Однако он просто не подходит к другому контроллеру вида! Он остается на одном контроллере! Как это:
контроллер точки зрения вместо добавления segue программно –
нажатие не происходит, когда в таблице нет контроллера навигации @DivyanshuSharma –
У меня есть контроллер просмотра навигации! @ Mr.T – Sweeper