Я задал этот вопрос один раз раньше, но я чувствую, что я не был настолько тщательным, насколько это возможно. Я пытаюсь выполнить стандартную иерархию иерархии сверла вниз программным способом, а не использовать IB, чтобы избежать ненужного скремблирования из-за того, что у меня есть более 40 различных представлений, которые я хочу реализовать. Я решил использовать следующий переключатель-оператор:Неисправность оператора полного деления
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var VC: UITableViewController
switch indexPath.row {
case 0: VC = SecondTableViewController()
default:()
}
navigationController?.pushViewController(VC, animated: true)
}
, как вы можете видеть, что это дает мне неинициализированную ошибку, поэтому я затем перейти, чтобы мои переменные необязательным, чтобы решить эту проблему & он компилирует и запускает:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var VC: UITableViewController?
switch indexPath.row {
case 0: VC = SecondTableViewController()
default:()
}
navigationController?.pushViewController(VC!, animated: true)
}
однако, когда я выбрать обозначенный ряд (который правильно при значении 0 после запуска в отладчике) она падает с этой ошибкой:
что, кажется, проблема? это оператор по умолчанию в моем коммутаторе? или это переменная в моем методе pushViewController? Могу ли я добавить, когда я изменяю параметр в этом методе из «VC/VC!» к «UITableViewController()», как например:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var VC: UITableViewController?
switch indexPath.row {
case 0: VC = SecondTableViewController()
default:()
}
navigationController?.pushViewController(UITableViewController, animated: true)
}
он работает & функции соответственно, но когда вид нажат, она не в TableViewController я обозначенный в моем переключателе заявлении, а затем просто пустой табличный вид. что мне не хватает?
ВОТ КОД ДЛЯ МОЕЙ SecondTableViewController:
импорт UIKit
класс SecondTableViewController: UITableViewController {
var myVariable = ["LIST OF STRINGS IN AN ARRAY"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myVariable.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell
var superVariable = myVariable [indexPath.row]
cell.textLabel!.text = superVariable
return cell
}
}
YESSS THAT WAS IT! спасибо man –
теперь, если я хочу повторно использовать подкласс UITableViewController и просто изменить источник данных вместо создания и инициализации нескольких подклассов? как я об этом? @rdelmar –
@RobertTillman Трудно ответить на этот вопрос абстрактно. Используете ли вы какие-либо пользовательские ячейки для всех контроллеров табличных представлений, которые вы используете сейчас, или используете ли UITableViewCell по умолчанию? Вы перемещаетесь за пределы SecondViewController, или вы только переходите вперед и назад между первым и всеми остальными? Знать что-то о том, какие данные вы имеете в виду, было бы полезно. – rdelmar