我已经在这里呆了差不多两天了。我不能让它显示任何东西。我会一步一步走,因为我不知道问题是什么。
我从一个空的Main.storyboard开始。
我将Table View Controller拖到Main.storyboard。
我将表视图控制器嵌入导航控制器中。
我创建了一个Cocoa Touch类UITableViewController
文件。我把它命名为TableViewController。
我在拖动的表视图控制器的标识检查器窗格中的“自定义类”下的“类”文本字段中键入TableViewController。
我创建了一个Cocoa Touch类UITableViewCell
文件。我把它命名为TableViewCell。
class TableViewController: UITableViewController {
let users = NSMutableArray()
override func viewDidLoad() {
// Register class
self.tableView.registerClass(TableViewCell.self, forCellReuseIdnetifier: "TVC")
// Since the Table View Controller I dragged onto Main.storyboard has outlets `dataSource` and `delegate` set to TableViewController, I do not need to set dataSource and delegate in code, correct? Either way, I've tried both ways.
// Load data
self.loadData()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
// Load data
func loadData() {
self.users.removeAllObjects()
let query = PFQuery(className: "User")
query.findObjectsInBackgroundWithBlock {(objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
for person in objects! {
self.users.addObject(person)
// The print statement here is printing
}
self.tableView.reloadData()
}
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let personCell = tableView.dequeueReusableCellWithIdentifier("TVC", forIndexPath: indexPath) as! EventTableViewCell
let person = self.users.objectAtIndex(indexPath.row)
personCell.userName.text = (event.objectForKey("email") as! String)
return personCell
}
class TableViewCell: UITableViewCell {
let userName = UILabel()
// I'm assuming the reuseIdentifier below should be the same as the one in TableViewController
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: "TVC")
userName.text = PFUser.currentUser()!.email
userName.translatesAutoresizingMaskIntoConstraints = false
self.contentView.addSubview(userName)
self.contentView.addConstraint(NSLayoutConstraint(item: UserName,
attribute: .CenterX,
relatedBy: .Equal,
toItem: self.contentView,
attribute: .CenterX,
multiplier: 1,
constant: 0))
self.contentView.addConstraint(NSLayoutConstraint(item: userName,
attribute: .CenterY,
relatedBy: .Equal,
toItem: self.contentView,
attribute: .CenterY,
multiplier: 1,
constant: 0))
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
所以我希望看到每个细胞中有一个标签的细胞数量。并且每个标签基于每个单元格以X和Y为中心。
抱歉代码墙,但我真的很难过。
答案 0 :(得分:1)
是否从样本中没有的某个地方调用了loadData函数?如果没有,我猜你想做这样的事情:
override func viewDidLoad() {
super.viewDidLoad() // <-- don't forget this part
self.tableView.registerClass(TableViewCell.self, forCellReuseIdnetifier: "TVC")
// Yup, your `dataSource` and `delegate` outlets are correct
// Now load up the data
loadData()
}
如果这对您有用,那么我将从loadData函数
中删除它self.tableView.reloadData()
答案 1 :(得分:1)
我明白了。实际上并没有执行约束。我错误地认为override init()
中的TableViewCell
表现得像viewDidLoad()
。所有代码实际上应该移动到新的覆盖函数。
override func layoutSubviews() {
// Set attributes, add to contentView, set constraints, etc.
}