使用 nib 的多个 customTableViewCell
Posted
技术标签:
【中文标题】使用 nib 的多个 customTableViewCell【英文标题】:multiple customTableViewCell using nib 【发布时间】:2014-09-03 21:31:23 【问题描述】:我正在尝试使用 Swift 创建多个自定义 tableViewCells。我使用了一个objective-c项目来转换成swift代码,这可能是它不起作用的原因。我用 xib 创建了 2 个 UITableViewCell 子类。然后我将子类添加到 xib 类中。
但是当我注册笔尖并尝试在 tableView 中显示它们时,tableView 是空的。我已将委托连接到 uitableView
viewDidLoad
self.tableView?.registerNib(UINib(nibName: "TextViewCell", bundle: nil), forCellReuseIdentifier: "TextViewCell")
self.tableView?.registerNib(UINib(nibName: "AttachViewCell", bundle: nil), forCellReuseIdentifier: "AttachViewCell")
cellForRowAtIndexPath
func tableView(tableView:UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!) -> UITableViewCell!
var cell: UITableViewCell? = nil
if indexPath.row == 0
var textCell:TextViewCell! = tableView.dequeueReusableCellWithIdentifier("TextViewCell") as? TextViewCell
textCell.nameTextView.text = "Test"
cell = TextViewCell()
if indexPath.row == 1
var attachCell:AttachViewCell! = tableView.dequeueReusableCellWithIdentifier("AttachViewCell") as? AttachViewCell
attachCell.attachLabel.text = "Attach image"
cell = AttachViewCell()
return cell
【问题讨论】:
你尝试过什么调试? attachCell 和 textCell 都不是零吗?但是,查看代码,您不应该有cell = textCell
和cell = AttachViewCell
(没有括号)以便返回出队的单元格吗?
您不应手动创建单元格 (cell = TextViewCell
),而应使用您出列并配置的单元格。在您的代码cell
中从未设置任何文本标签,您应该返回textCell
/attachCell
而不是cell
。看看 POB 的回答。
【参考方案1】:
使用 Xcode 6 beta 7,您的 UITableViewController
类应如下所示:
import UIKit
class ViewController: UITableViewController
override func awakeFromNib()
super.awakeFromNib()
override func viewDidLoad()
super.viewDidLoad()
tableView.registerNib(UINib(nibName: "TextViewCell", bundle: nil), forCellReuseIdentifier: "TextViewCell")
tableView.registerNib(UINib(nibName: "AttachViewCell", bundle: nil), forCellReuseIdentifier: "AttachViewCell")
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 2
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
if indexPath.row == 0
let cell = tableView.dequeueReusableCellWithIdentifier("TextViewCell", forIndexPath: indexPath) as TextViewCell
cell.nameTextView!.text = "Test" //@IBOutlet weak var nameTextView: UILabel!
return cell
else
let cell = tableView.dequeueReusableCellWithIdentifier("AttachViewCell", forIndexPath: indexPath) as AttachViewCell
cell.attachLabel!.text = "Attach image" //@IBOutlet weak var attachLabel: UILabel!
return cell
请注意,在 Xcode 6 beta 7 中,tableView:cellForRowAtIndexPath:
不再返回可选的 UITableViewCell
。所以你必须使用前面的代码。如果您使用以前版本的 Xcode 6 beta 和 tableView:cellForRowAtIndexPath:
返回一个隐式展开的可选 UITableViewCell
,您可以编写以下代码:
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
if indexPath.row == 0
let cell = tableView.dequeueReusableCellWithIdentifier("TextViewCell", forIndexPath: indexPath) as TextViewCell
cell.nameTextView!.text = "Test" //@IBOutlet weak var nameTextView: UILabel!
return cell
if indexPath.row == 1
let cell = tableView.dequeueReusableCellWithIdentifier("AttachViewCell", forIndexPath: indexPath) as AttachViewCell
cell.attachLabel!.text = "Attach image" //@IBOutlet weak var attachLabel: UILabel!
return cell
return nil
【讨论】:
出现问题:NSInternalInconsistencyException',原因:'为标识符注册的无效笔尖 (cell_printStatus) - 笔尖必须包含一个必须是 UITableViewCell 实例的***对象'以上是关于使用 nib 的多个 customTableViewCell的主要内容,如果未能解决你的问题,请参考以下文章