2017-03-20 62 views
0

首先,我瘋了,試圖在iOS中創建自定義單元格。經過幾十個其他問題的答案,我似乎沒有得到相同的結果,我不明白爲什麼。我的用例:創建一個用於表格視圖的自定義單元格,很簡單。使用swift爲iOS應用程序創建自定義單元格3

我坐在一個UIView裏面,有一個單細胞具有單一標記的表視圖: enter image description here

我給我的手機的標識:

enter image description here

我鏈接的自定義類在故事板電池:

enter image description here

我在單元上的標籤鏈接的電源插座上我的自定義類: enter image description here

這裏是我的視圖控制器代碼:

class LoggedInViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
     @IBOutlet weak var tmImage: UIImageView! 
     @IBOutlet weak var tmNameLabel: UILabel! 
     @IBOutlet weak var tmMeetingLabel: UILabel! 
     @IBOutlet weak var mainLabel: UILabel! 
     @IBOutlet weak var attendeesTableView: UITableView! 

     //Test table view details 
     let names: [String] = ["Bobby", "Mark", "Waldo"] 

     override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib 

      //Setup table and cells 
      attendeesTableView.delegate = self 
      attendeesTableView.dataSource = self 
      self.attendeesTableView.register(LoggedInTableViewCell.self, forCellReuseIdentifier: "attendeeCell") 
     } 

     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      return self.names.count 
     } 

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell: LoggedInTableViewCell = self.attendeesTableView.dequeueReusableCell(withIdentifier: "attendeeCell", for: indexPath) as! LoggedInTableViewCell 
      cell.cellNameLabel?.text = self.names[indexPath.row] 
      return cell 
     } 
    } 

而當這是跑,它沒有返回值和細胞從方法返回上面是零打印時:

enter image description here

任何人都可以點我在正確的方向?

謝謝!

+2

你可以請修復發佈的代碼。現在發佈,它看起來像兩個表視圖數據源方法是'viewDidLoad'內。 – rmaddy

+1

爲什麼當你已經通過Storyboard進行註冊時註冊了一個單元格?另外,你還有多少部分? –

+1

沒有經驗下面的教程,它看起來像註冊表衝突並導致問題。我現在能夠成功獲得我需要的東西,謝謝! – tbaldw02

回答

-1

您不需要在attendeesTableView上調用register(_:forCellReuseIdentifier:)實例方法。刪除此行應該修復不顯示的單元格。

原因是您在故事板本身中創建了單元格。或者,如果您將它設計成筆尖,則需要註冊它。

Matt Neuberg在他的書「Programming iOS 10,Seventh Edition」中設計了一個使用故事板的自定義單元格。

下面是從他的書中關於爲什麼如果你使用的是故事板,你不應該註冊一個報價:

在您的表視圖控制器代碼,請確保你不叫 寄存器(_:換CellReuseIdentifier :)。如果你確實打電話給它,你將會是 告訴運行時不要從故事板中獲取單元格。 (Neuberg,2016,p。469)

Neuberg,M.(2016)。編程iOS 10第7版。加利福尼亞州:O'Reilly Media公司

+0

儘管最好引用參數,但這種改變在這種情況下完全沒有效果,因爲這裏唯一的表格視圖是'self.attendeesTableView'。 – rmaddy

+0

謝謝@rmaddy。你是對的。我原來的回答並沒有解決核心問題。我修改了我的答案。 –

0

self.attendeesTableView.register(LoggedInTableViewCell.self,forCellReuseIdentifier: 「attendeeCell」)

更換

self.attendeesTableView。register(UINib(nibName:「LoggedInTableViewCell」,bundle:nil),forCellReuseIdentifier:「attendeeCell」)

檢查你的故事板數據源和委託是否連接到相應的視圖控制器。

相關問題