尝试在我的应用程序中计算出几个场景,我无法让tableViews正常工作。
我正在执行 tableView 等设置,用户在两个可能的设置之间进行选择。每个选项都会导致新的tableView,用户必须选择其中一个可用选项。一旦用户选择了一个,第一个场景中的标签将显示所选的值(也存储为NSUserDefaults)。因此,如果我没有弄错,这可以用3个静态tableViews来实现。下面的代码就是我试图这样做的方法:
初始设置视图控制器:
class SettingsVC2: UITableViewController{
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.section == 0{
let cell = tableView.dequeueReusableCellWithIdentifier("office_cell", forIndexPath: indexPath)
cell.textLabel?.text = "Select your office"
return cell
}
else {
let cell = tableView.dequeueReusableCellWithIdentifier("dept_cell", forIndexPath: indexPath)
cell.textLabel?.text = "Select your department"
return cell
}
其中一个设置tableViews:
class SettingsDepartmentTVC: UITableViewController{
let departamentos: [String] = ["Sales", "Pre-Sales", "General Administration", "Customer Service", "Profesional Services", "Regionales"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return departamentos.count
}
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell: UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("department_cell", forIndexPath: indexPath)
cell.textLabel?.text = self.departamentos[indexPath.row]
return cell
}
}
我相信所有的数据源和代理都是正确的,即使没有显示也会导入UIKit。
Erros Im:
断言失败 - [UITableView dequeueReusableCellWithIdentifier:forIndexPath:]
由于未捕获的异常而终止应用 ' NSInternalInconsistencyException',原因:'无法将单元格出列 标识符为office_cell - 必须注册一个笔尖或一个类 标识符或连接故事板中的原型单元
这是我尝试填充tableView的方法:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
-> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("CommentsRowTVC", forIndexPath: indexPath) as! CommentsRowTVC
let single_comment = self.AOS[indexPath.row]
cell.titulo_comentario?.text = single_comment.titulo_comment
cell.cuerpo_comentario?.text = single_comment.cuerpo_comment
cell.fecha_comentario?.text = single_comment.fecha_comment
return cell
}
class CommentsRowTVC: UITableViewCell {
@IBOutlet weak var titulo_comentario: UILabel!
@IBOutlet weak var cuerpo_comentario: UILabel!
@IBOutlet weak var fecha_comentario: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
这是UIViewController的连接检查器,其中表是:
这个用于UIViewCellController:
到目前为止的错误:
UIView tableView:numberOfRowsInSection:发送到实例的无法识别的选择器
由于未捕获的异常而终止应用程序NSInvalidArgumentException,原因:[UIView tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例
答案 0 :(得分:2)
如果您真正制作静态表格视图单元格,那么您应该删除这些方法。只有在动态出列单元格时才使用它们。
t.notify()
如果您实际上正在尝试制作动态单元格,那么,正如您的错误消息所示,您需要确保您的标识符与界面构建器中的标识符相匹配:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return departamentos.count
}
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell: UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("department_cell", forIndexPath: indexPath)
cell.textLabel?.text = self.departamentos[indexPath.row]
return cell
}
答案 1 :(得分:1)
使用您提供的代码,您似乎没有在表格视图中注册表格视图单元格和标识符。
How can I prevent SQL injection in PHP?
讨论在出列任何单元格之前,请调用此方法或 registerNib:forCellReuseIdentifier:告诉表视图的方法如何 创造新的细胞。如果当前不是指定类型的单元格 在重用队列中,表视图使用提供的信息 自动创建一个新的单元格对象。
如果您以前使用相同的重用注册了类或nib文件 标识符,您在cellClass参数中指定的类将替换 旧条目。如果需要,可以为cellClass指定nil 从指定的重用标识符中取消注册该类。
我建议你在viewDidLoad()
注册它们。
let KDepartmentCellIdentifier = "department_cell"
tableView.registerClass(UITableViewCell.class, forCellReuseIdentifier: kKDepartmentCellIdentifier)
let KOfficeCellIdentifier = "office_cell"
tableView.registerClass(UITableViewCell.class, forCellReuseIdentifier: kOfficeCellIdentifier)
如果您使用的是笔尖,请使用
registerNib(_ nib: UINib?, forCellReuseIdentifier identifier: String)