[英]Loading a Custom UITableViewCell from nib to a UIViewController in Swift
我目前正在研究一項運動快速程序,該程序要求CoreData結果顯示在表上。
我已經對應用程序進行了結構設計,使得故事板本身不包含任何UI元素,僅包含視圖(帶有隨附的UIViewController
類),然后加載自定義筆尖/ xibs(還附帶UIView
子類)。 在這種情況下,xib包含UITableView
,而另一個xib包含單元格。
TableView類別 :
import UIKit
protocol SkillsViewDelegate{
}
class SkillsView: UIView {
var delegate : SkillsViewDelegate!
@IBOutlet weak var skillsTable: UITableView!
}
TableView控制器 :
import UIKit
import CoreData
class SkillsViewController: UIViewController, SkillsViewDelegate, UITableViewDataSource, UITableViewDelegate {
var displaySkillsView : SkillsView!
var displaySkillsCell : SkillViewCell!
let textCellIdentifier = "skillViewCell"
override func viewDidLoad() {
super.viewDidLoad()
self.displaySkillsView = UIView.loadFromNibNamed("SkillsView") as! SkillsView
self.displaySkillsView.delegate = self
self.view = self.displaySkillsView
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//MARK : -Table view delegates
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath)
return cell
}
}
TableCellView類別 :
import UIKit
protocol SkillsViewCellDelegate{
}
class SkillViewCell: UITableViewCell {
var delegate : SkillsViewCellDelegate!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
@IBOutlet weak var skillName: UILabel!
@IBOutlet weak var skillRank: UILabel!
}
我不知道如何將單元xib調用到控制器中。 我想這是類似的問題 ,但是不同的是那個家伙正在使用UITableViewController
。 我也嘗試添加它,但是由於麻煩,我Multiple inheritance from classes 'UIViewController' and 'UITableViewController'
獲得了Multiple inheritance from classes 'UIViewController' and 'UITableViewController'
。
我試過的
我嘗試在頂部添加UITableViewController
,但是由於麻煩,我Multiple inheritance from classes 'UIViewController' and 'UITableViewController'
獲得了Multiple inheritance from classes 'UIViewController' and 'UITableViewController'
。
有什么建議么?
您可以在SkillsViewController中注冊SkillsViewCell
對象C
-(void)viewDidLoad {
[super viewDidLoad];
UINib *cellNib = [UINib nibWithNibName:@"NibName" bundle:nil];
[self.skillsTable registerNib:cellNib forCellReuseIdentifier:textCellIdentifier];
}
迅捷2
override func viewDidLoad() {
super.viewDidLoad()
let nibName = UINib(nibName: "NibName", bundle:nil)
self.skillsTable.registerNib(nibName, forCellReuseIdentifier: textCellIdentifier)
}
斯威夫特4
override func viewDidLoad() {
super.viewDidLoad()
let nibName = UINib(nibName: "NibName", bundle:nil)
self.skillsTable.register(nibName, forCellReuseIdentifier: textCellIdentifier)
}
然后僅繼承自UIViewController而不繼承自UITableViewController
調用特定於您的自定義單元格的方法
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as! SkillViewCell
cell.skillName.text = "Some text"
cell.skillRank.text = "Some text"
return cell
}
我認為您將需要使用
func registerNib(_ nib: UINib?, forCellReuseIdentifier identifier: String)
在viewDidLoad
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.