在我的main.Storyboard上我有一个TableViewController,它被设置为一个带有TableViewController.swift的自定义类。
swift文件定义了所有tableview函数,并连接了UITableView的@IBOutlet。定义的类是UINavigationController,UITableViewDelegate。这个viewController是通过prepareForSegue函数从secondViewController调用的。
我还使用类UITableViewCell创建了CustomCell.swift,并为我的UITableViewCell中的标签创建了所有@IBOutlet,该标签已设置为customCell类。
我无法粘贴所有代码,但如果您需要查看任何特定代码,请告知我们,我很乐意发布该代码。
构建成功并且应用程序运行但是tableviewcells没有显示,并且没有调用任何tableview函数。我看到2个flash动画屏幕 - 表示tableviewcell可能有2个视图 - 但无法弄清楚我应该检查的位置?
//下面是触发TableViewController的segue函数
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//print("In prepareswgue: ",segue, " ",sender)
if(segue.identifier == "resultSegue")
{
let nav = segue.destinationViewController as! UINavigationController
let svc = nav.topViewController as! TableViewController
svc.serialNo = self.TSSerialNoField.text
}
}
//Below is the custom TableVIewController class code
class TableViewController: UINavigationController,UITableViewDataSource, UITableViewDelegate
{
var serialNo:String!
var ashHardwareData: NSMutableArray!
@IBOutlet var ResultTableView: UITableView!
//@IBOutlet weak var LogCaseButton: UIButton!
@IBOutlet weak var TypeResultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.ResultTableView?.allowsSelectionDuringEditing = true
self.ResultTableView?.delegate = self
ResultTableView?.dataSource = self
}
override func viewDidAppear(animated: Bool) {
self.getHardwareData(serialNo.uppercaseString)
}
/*override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
}*/
func getHardwareData(serialno:String)
{
ashHardwareData = NSMutableArray()
ashHardwareData = ModelManager.getInstance().getHardwareData(serialno)
ResultTableView?.reloadData()
}
//TableView Delegate Methods
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
print("In height func")
return 50
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(ashHardwareData.count)
return ashHardwareData.count
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:ResultsCell = tableView.dequeueReusableCellWithIdentifier("results", forIndexPath: indexPath) as! ResultsCell
let hardware:HardwareInfo = ashHardwareData.objectAtIndex(indexPath.row) as! HardwareInfo
let contract:ContractInfo = ashHardwareData.objectAtIndex(indexPath.row) as! ContractInfo
cell.SNOLabel.text = "Serial N0: \(hardware.SerialNo)"
cell.ContractIDLabel.text = "Contract ID: \(contract.ContractID)"
cell.OrgLabel.text = "Organisation: \(hardware.Organisation)"
cell.ModelLabel.text = "Model: \(hardware.Model)"
if(contract.DaystoExpiry > 0) {
cell.TypeLabel.text = "Contract Type: Active"
self.TypeResultLabel.hidden = false
self.TypeResultLabel.text = "To log a technical case for the Hardware please click on Log Technical Case button."
cell.LogCaseButton.hidden = false
cell.LogCaseButton.tag = indexPath.row
}
else {
cell.TypeLabel.text = "Contract Type: Expired"
cell.LogCaseButton.hidden = true
self.TypeResultLabel.hidden = false
self.TypeResultLabel.text = "Support Contract for the hardware expired. Please contact Sales team to renew the contract."
}
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
//here is the code for the ResultsCell custom UITableViewCell
import Foundation
import UIKit
class ResultsCell: UITableViewCell {
@IBOutlet weak var SNOLabel: UILabel!
@IBOutlet weak var LogCaseButton: UIButton!
@IBOutlet weak var ContractIDLabel: UILabel!
@IBOutlet weak var OrgLabel: UILabel!
@IBOutlet weak var TypeLabel: UILabel!
@IBOutlet weak var ModelLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
答案 0 :(得分:0)
您是否在故事板或ResultsCell
中配置了view didload
。检查一次。如果没有尝试将以下代码添加到view didload
[self.tableView registerNib:[UINib nibWithNibName:@"ResultsCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"ResultsCell"];
答案 1 :(得分:0)
我花了很多时间试图解决这个问题并决定不使用tableviewcell,而是创建了自定义viewControllers并定义了标签以显示数据库搜索的结果(工作正常)并使用执行segue函数以在viewcontrollers之间传递值。所以现在我的应用程序按照我想要的方式工作 - 从编程方面可能并不理想,但由于时间限制,我必须让它工作。 我将我的应用程序作为带有第一个和第二个ViewControllers的选项卡式应用程序。 FirstViewController将数据添加到SQLLite DB,第二个搜索数据并显示结果。为了显示结果,我创建了一个Custom viewController,其中包含我想要显示的数据的标签,并将来自DB的所有数据传递给SecondViewController函数,并使用数据更新标签。只要我得到结果,我希望我很开心。如果必须的话,我会重新访问这个以获得改进。感谢所有回答解决方案和建议的人。这是一个很好的学习经历:)