我正在尝试使用Swift创建多个自定义tableViewCells。我已经使用了一个objective-c项目来转换成快速代码,这可能是它无法工作的原因。我用xib创建了2个UITableViewCell子类。然后我将子类添加到xib类。
但是当我注册nib并尝试在tableView中显示它们时,tableView是空的。我添加了将委托连接到uitableView
self.tableView?.registerNib(UINib(nibName: "TextViewCell", bundle: nil), forCellReuseIdentifier: "TextViewCell")
self.tableView?.registerNib(UINib(nibName: "AttachViewCell", bundle: nil), forCellReuseIdentifier: "AttachViewCell")
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
}
答案 0 :(得分:10)
使用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:
返回Implicitly Unwrapped Optional 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
}