我是swift的新手,我正试图让我的文字标签显示在我的桌面视图上,但它只是没有显示出来。以下是我的文件,它确实成功构建。
UI的树巢: - 主视图控制器 ---- UI Tabel视图 ------主视图控制器单元
我开始认为我正在错误的地方重新加载桌子。
我提前感谢您的帮助!
当我删除self.mainTableView.reloadData()时,不会显示任何单元格。 此时,我仍然可以点击单元格,然后他们会回复以下调试器行:
You selected Number 0
You selected Number 1
You selected Number 2
MainViewController.swift
import Foundation
import Locksmith
import UIKit
import Alamofire
import SwiftyJSON
import Alamofire
import JWTDecode
class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var userFeed = [UserFeedRow]()
@IBOutlet weak var mainTableView: UITableView!
override func viewDidLoad() {
mainTableView.registerClass(MainViewTableViewCell.self, forCellReuseIdentifier: "mainTableViewCell")
mainTableView.delegate = self
mainTableView.dataSource = self
mainTableView.separatorStyle = UITableViewCellSeparatorStyle.None
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.userFeed.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("You selected Number \(indexPath.row)")
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
UITableViewCell {
println("celler \(indexPath.row)")
var cell:MainViewTableViewCell = self.mainTableView.dequeueReusableCellWithIdentifier("mainTableViewCell", forIndexPath:indexPath) as MainViewTableViewCell
let feedRow = userFeed[indexPath.row]
println(feedRow.title)
cell.mainTableViewCellTitle?.text = feedRow.title
return cell
}
override func viewDidAppear(animated: Bool) {
// Alamofire GET user/user_feed
// Display user feed in tableview inside of uiviewcontroller
loadUserFeed()
}
func loadUserFeed(){
println("loadUserFeed")
let api = API()
api.getUserFeed(){
responseObject, error in
var json = JSON(responseObject!)
if error == nil{
// get feed
var responseFeed = json["feed"]
//println(json)
for (index: String, subJson: JSON) in responseFeed {
var aTitle = subJson["title"].stringValue
println(aTitle)
// save object to array here
var row = UserFeedRow(title: aTitle)
self.userFeed.append(row) // Appending userfeed
}
self.mainTableView.reloadData()
}
}
}
}
自定义TableView单元格
import Foundation
import UIKit
class MainViewTableViewCell: UITableViewCell{
@IBOutlet weak var mainTableViewCellBackgroundImage: UIImageView!
@IBOutlet weak var mainTableViewCellTitle: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
答案 0 :(得分:1)
我会将我的评论转换为答案并附加解释。
基本上有两种处理自定义UITableViewCell
的方法:一种是通过故事板(原型单元格)创建它们,就像你已经完成的那样,并且(通常)将它们分配给自定义类;另一种是单独创建它们(使用自定义类,或使用自定义NIB文件,或使用自定义类+ NIB文件)。
在故事板中创建单元格会使registerClass:forCellReuseIdentifier:
在后台跳舞。当您在代码中调用此方法时,它会切断storyboard单元格与您已创建的自定义类之间的连接,而只是从您的自定义类创建单元格,在这种情况下,该单元格不包含任何视图信息,并呈现为空。
另外一条忠告:如果您认为您可能需要更多地方的特定单元格,而不是您的应用程序中的某个单元格,那么使用NIB +类方法创建它可能会更好,并调用registerNIB:forCellReuseIdentifier:
你想用它。有了这个,而不是在您需要的任何故事板视图中复制粘贴单元格(如果需要更改,则必须单独更改所有这些),您可以在整个应用程序中维护单个视图/ NIB。