2014-07-17 75 views
0

我已經有段時間沒有編碼iOS了,而且我正在目睹一些新行爲,並且想知道它是如何工作的。如何使用UITableViewController的新單元格重用行爲初始化單元格

它曾經是cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]會返回一個細胞或不,但我現在看到的代碼示例缺少初始化部分:

if (cell == nil) { 
    cell = [MyCellClass new];//and I think somehow registering the cell with the identifier 
    //Some code here, for example: 
    //[cell.button addTarget:self action:@selector(buttonPressedAction:) forControlEvents:UIControlEventTouchUpInside]; 
} 

難道要做到這些初始化每次現在,沒有檢查細胞的存在?

編輯:我的使用情況的詳細信息: 我的手機有一個NIB文件,我用我的ViewControllerviewDidLoad[[self tableView] registerNib:[UINib nibWithNibName:@"cell" bundle:nil] forCellReuseIdentifier:@"cell"]。我的ViewController不存在於任何Nib/StoryBoard中。

回答

1

dequeueReusableCellWithIdentifier:forIndexPath:保證返回一個單元格,並且一直是(它已被添加到iOS 6中)。

你記得dequeueReusableCellWithIdentifier:,它在iOS 6之前使用過,它沒有相同的保證。新的API更好用:)

+0

我明白了。現在,安裝ControlEvent偵聽器的最佳做法是什麼?在每個'tableView:cellForRowAtIndexPath:',應該調用'addTarget:action:forControlEvents:'? (考慮到在我的使用情況下,它應該以編程方式完成。單元格和控制器不在同一個筆尖/故事板中) – Mabedan

+0

要判斷一行是否被輕敲(大概這就是你想要做的?), tableView:didSelectRowAtIndexPath:在你的表視圖控制器中。 –

+0

我試圖檢測單元格內的UIButton是否已被挖掘 – Mabedan

1

使用registerNib:forCellWithReuseIdentifier:時,會自動處理細胞創建。

docs

此前調用dequeueReusableCellWithReuseIdentifier:forIndexPath:集合視圖的方法,您必須使用此方法或的registerClass:forCellWithReuseIdentifier:方法告訴集合視圖如何創建一個給定類型的新單元格。如果指定類型的單元當前不在重用隊列中,則集合視圖將使用提供的信息自動創建新的單元對象。

相關問題