[英]Xcode 5.1 UITableView in UIViewController - Custom TableViewCell Outlets are nil
我有一個UITableView作為UIViewController中的子視圖。 我沒有使用UITableViewController,因為我有一些與tableview無關的其他內容占用了部分屏幕。 我正在使用故事板。 我將tableview設置為插座,viewcontroller是數據源和委托。 如果我在這種情況下使用標准的UITableViewCell,一切運行良好,我可以加載內容。
我需要為此tableview使用自定義UITableViewCell,因此我執行了以下步驟:
[self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
cellForRowAtIndexPath:
方法中,將單元格出列並轉換為自定義子類: SWTableViewCell *cell = (SWTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
檢查時,單元格變量是正確的類型。 它不是UITableViewCell,而是SWTableViewCell。 但沒有一個網點人口稠密。 屬性存在,但它們是零。 我敢肯定有一個我必須要忘記的聯系,但我想不出我在這一點上跳過的任何事情。
這種情況是否可行,或者它是否只能通過IB和故事板工作?
刪除呼叫
[self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
解決了這個問題。
我不知道這個方法究竟是做什么的,因為我從未使用它,所以我會調查一下。 如果有人有關於某些信息的信息,請告訴我們!
編輯:
因此, registerClass:forCellReuseIdentifier:
背后的想法是它告訴tableView如何創建新的單元格。 這樣,如果dequeueReusableCellWithIdentifier:
不返回單元格(如果隊列為空),則tableView知道如何創建新單元格,而不需要手動創建一個單元格。
編輯2:
我找到了這個帖子,其中說:
如果使用故事板中的原型創建單元格,則無需注冊該類。
只需調用dequeueReusableCellWithReuseIdentifier:
將“激活”tableView的單元重用功能。
所以registerClass:forCellReuseIdentifier:
只有在不使用故事板的情況下手動構建單元格時才會被調用。
以下是一些提示:
基本上可以有3種方法來創建和使用UITableViewCell
:
在storyboard / nib中使用“prototype”單元格
(在UITableView
內的storyboard / nib中創建單元格UI)
您不應該使用 registerClass:forCellReuseIdentifier:
或registerNib:forCellReuseIdentifier:
methods。 UIStoryboard
自己處理它,因為你在storyboard中指定了reuseIdentifier
, tableView
知道哪個cell與哪個reuseIdentifier
相關聯。
為tableViewCell
UI使用單獨的nib
(當你想在幾個tableView
使用相同的tableViewCell
時,這可能是一種方法)
您應該使用registerNib:forCellReuseIdentifier:
方法。
不要使用nib,以編程方式創建tableViewCell
UI
您應該使用registerClass:forCellReuseIdentifier:
方法。
另請注意, registerClass:forCellReuseIdentifier:
和registerNib:forCellReuseIdentifier:
都應該在之前調用(最常見於viewDidLoad
) dequeueReusableCellWithIdentifier:forIndexPath:
方法被調用。 如果為reuseIdentifier
注冊了類或nib,則可以保證dequeueReusableCellWithIdentifier:forIndexPath:
返回一個有效的單元格(與dequeueReusableCellWithIdentifier:
不同)。
在您的代碼中, Storyboard
為單元格注冊了一個帶有UI的nib
,但是您調用了registerClass:forCellReuseIdentifier:
使用相同的reuseIdentifier
強制表視圖取消注冊nib並注冊不知道IBOutlet
的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.