2012-06-15 31 views
11

我有一個UITableViewController子類,其原型單元格在故事板中被嘲笑起來。是否dequeueReusableCellWithIdentifier:在我的UITableViewCell子類中調用初始化器?

設置單元格的cellForRowAtIndexPath委託方法中有相當多的代碼。問題是,如果單元剛剛從重用池中出列,我不需要大部分,因爲當單元首次出隊時它已經完成。我無法在故事板中執行此操作,因爲有些屬性只能以編程方式訪問。

UITableViewController在我的UITableViewCell子類中調用初始化器時,是否需要故事板中的原型單元格?我試過(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier,但這似乎並不是這個過程的一部分。

回答

12

當UITableView實例調用dequeueReusableTileWithIdentifier:時,單元格不會重新初始化。相反,在該調用中,出隊的UITableViewCell將調用-(void)prepareForReuse。這是因爲重新初始化單元成本很高,如果我們可以提供一種更簡單的方法來準備重用(呃,呃,得到它),它可以節省大量的CPU工作。

因此,如果您使用的是自定義單元格,請覆蓋UITableViewCell prepareForReuse

10

我大概沒有正確地說我的問題,但我在這裏找的其實是(void)awakeFromNib

當單元格出隊而不是重用時調用一次。允許我以編程方式進行一些設置,使其在故事板中無效。

+1

(vodi)awakeFromNib適用於你只想要發生一次的事情,比如向UILabel添加手勢識別器。 –

相關問題