2015-12-14 56 views
-1

在我的main.Storyboard上,我有一個TableViewController,它被設置爲一個帶有TableViewController.swift的自定義類。自定義TableView函數沒有被調用?

swift文件具有定義的所有tableview函數和連接的UITableView的@IBOutlet。定義的類是UINavigationController,UITableViewDelegate。這個viewController是通過prepareForSegue函數從secondViewController調用的。

我還創建了CustomCell.swift類UITableViewCell和所有@IBOutlet的標籤在我的UITableViewCell已被設置爲customCell類。

我無法粘貼我所有的代碼,但如果您需要查看任何特定的代碼,請告訴我,我很樂意發佈。

構建成功,應用程序運行,但tableviewcells不顯示,並且沒有任何tableview函數被調用。我看到2個Flash動畫屏幕 - 表示tableviewcell可能有2個視圖 - 但無法確定我應該檢查的位置?

//下面是SEGUE觸發功能的TableViewController

 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

我用代碼修改了問題。如果你需要更多的話讓我知道。感謝您的快速回復 – Ashley

+0

爲什麼你的'TableViewController'擴展了'UINavigationController'?爲什麼不'UIViewController'甚至是'UITableViewController'? – rmaddy

回答

0

有你在故事板或view didload配置ResultsCell。檢查一次。如果不嘗試下面的代碼添加到我的時間你view didload

[self.tableView registerNib:[UINib nibWithNibName:@"ResultsCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"ResultsCell"]; 
+0

如果我在viewDidLoad函數中聲明瞭代碼,則會出現錯誤。我正在用xcode 7.1.1使用Swift。這是要求我把一個;在:forCellReuseIdentifier之後。我有ResultsCell.swift文件聲明所有的標籤顯示在表VIewCell – Ashley

+0

嘗試這一個,self.tableView.registerClass(ResultsCell.self,forCellReuseIdentifier:「單元格」) – NRV

0

我花了公平位試圖讓這個問題得到解決,並決定去無tableviewcell,而是我已經創建了定製viewControllers和定義標籤顯示來自DB搜索的結果(工作正常),並使用執行segue函數在視圖控制器之間傳遞值。所以現在我的應用程序按我想要的方式工作 - 從編程方面來看可能並不理想,但由於時間的限制,我不得不做這個工作。 我有我的應用程序作爲選項卡式應用程序與第一和第二ViewControllers。 FirstViewController將數據添加到SQLLite數據庫,第二次搜索數據並顯示結果。爲了顯示結果,我創建了一個自定義視圖控制器,其中包含我想要顯示的數據的標籤,並將來自數據庫的所有數據從SecondViewController函數傳遞給它,並用數據更新標籤。只要我得到我想要的結果,我很高興。如果必須的話,我會重新訪問這個進行改進。感謝所有回答解決方案和建議的人。這是一個很好的學習經驗:)