2016-09-03 72 views
0

下面的代碼:如何在表格視圖中使用單元格的標識符?

import UIKit 

class SliderMenuTableViewController: UITableViewController { 

var tableArray = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 

    let age: String 
    age = String(LoginViewController.AGE) 

    let Profile = LoginViewController.NAME! + ", " + age 

    tableArray = [Profile,"Second","Third","Fourth","Logout"] 

} 

// table view delegate method 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = tableView.dequeueReusableCellWithIdentifier(tableArray[indexPath.row], forIndexPath: indexPath) as UITableViewCell 


    cell.textLabel?.text = tableArray[indexPath.row] 
    if cell.textLabel?.text == tableArray[0] { 

     cell.imageView?.frame = CGRectMake(10, 10, 50, 50) 

     cell.imageView!.layer.borderWidth = 1 
     cell.imageView!.layer.masksToBounds = false 
     cell.imageView!.layer.borderColor = UIColor.blackColor().CGColor 
     cell.imageView!.layer.cornerRadius = cell.imageView!.frame.width/2 
     cell.imageView!.clipsToBounds = true 
     cell.imageView?.image = LoginViewController.AVATAR 
    } 


    return cell 
} 

時出錯:

終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「不能出列與標識尤,可選電池(29) - 必須註冊一個筆尖或類的標識符或連接故事板中的原型單元

我知道我必須標識單元格,如何從代碼中執行此操作會導致變量'Profile'在我的tableArray中不是靜態的,我不能從故事板標識它?

+0

在Interface Builder中將表格視圖單元格拖入表格視圖。然後你可以添加標識符。 – vadian

回答

-1

這是因爲您的手機未與identifier正確啓動。使用下面的代碼來創建單元格和使用。動態的單元ID初始化在這裏產生概率

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell 

,而不是您的:

var cell = tableView.dequeueReusableCellWithIdentifier(tableArray[indexPath.row], forIndexPath: indexPath) as UITableViewCell 

編輯:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    // here you get the each cell by indexpath.row 
    // code here to go to the another viewController accordingly 
    print("You selected cell #\(indexPath.row)!") 
} 

編輯2: 導航使用下面的代碼上點擊了小區的其他視圖,並顯示您的自定義數據。

let vc: UIViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("viewContName"))! 
self.navigationController?.pushViewController(vc, animated: true) 
+0

好吧,它的手機,但...現在我需要通過點擊單元格的每個項目移動到另一個視圖控制器。在此之前,我有5個單元格與另一個標識符,我只是從故事板設置segue移動到我想要的viewcontroller。但現在我該怎麼做呢? –

+0

不應使用該出列方法。你應該使用索引路徑,並正確註冊類或筆尖。甚至在文檔中。不要重新推薦令人沮喪的代碼。 – Fogmeister

+0

基本上,'dequeueReusableCellWithIdentifier:forIndexPath:'方法非常好。只有*動態*標識符導致問題。 – vadian

0

您沒有在單元中給出正確的單元標識符,因爲它正在崩潰。 CellIdentifier你需要在這裏提供你將用於單元格的方法。在故事板中爲同一個單元格放置相同的標識符。

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell 

    //configure your cell 

    return cell 
} 

你有你如何使用自定義單元格

註冊自定義單元格

tableView.registerClass(MyCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier) 

註冊自定義單元格用XIB1註冊在以下取決於方式細胞:

tableView.registerNib(UINib(nibName: "UICustomTableViewCell", bundle: nil), forCellReuseIdentifier: "UICustomTableViewCell") 

更新:即使您可以在XIB中分配單元格標識符,以及如果您正在創建c通過XIB。

+0

它比在代碼中註冊單元格更方便 - 特別是初學者 - 在Interface Builder中使用原型單元。 – vadian

+0

是這個答案需要投票嗎?我想我的答案是以另一種方式激勵實施的?想知道投票的理由。 – Sandy

+0

我不是我投票的人。 – vadian

0

enter image description here

這裏的故事板。 第一個 我使用SWRevealViewController作爲滑塊菜單。現在通過點擊菜單中的單元格,就可以告訴我它移動到另一個視圖控制器,但菜單在那裏不起作用。

和我使用此代碼:

讓mainStoryboard = UIStoryboard(名稱: 「主」,束:NSBundle.mainBundle()) 設VC:的UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier( 「檔案」),爲的UIViewController 自。presentViewController(VC,動畫:真,完成:無)

這樣:

let vc: UIViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("viewContName"))! 

self.navigationController .pushViewController(VC,動畫:真)

不起作用。如何移動到配置文件視圖控制器和菜單仍然工作?

+0

請編輯你的問題不要在這裏發佈問題我們會幫助你確定.. – vaibhav

+1

理解UI設計的一般聲明:如果你使用一個故事板**和**塞住你**不需要**'instantiateViewControllerWithIdentifier **或'registerClass/registerNib' ** **。只有當你想從其他筆尖或故事板加載UI或使用多個故事板或在代碼中創建單元和控制器時,你才需要**。 – vadian

相關問題