我遇到了一些問題。通常,在處理UITableView時,我將構建一個特殊的 方法,configureCell,它構建tableView需要的單元格。因此cellForRowAtIndexPath查詢configureCell以獲取新的單元格,如果在緩存中找不到任何單元格的話。具有單個自定義單元格的UITableView? (iPhone)
在這種獲取運行用戶每次滾動的cellForRowAtIndexPath部分:
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
}
//this part is always executed!
}
我從我的模型設定的標籤值等。這工作正常,我相信,這應該是如何正確工作,並在CPU上最小的壓力。從我可以在TableView指南中讀到的內容。
我現在的問題是,我的tableView中的第一個單元格與其他單元格不同。我有一個特殊的圖標和其他東西,將它與其他單元格分開。
在我的配置單元的然後我試着問:
if (indexPath.row == 0) {
//do special setup!
}
這是一個壞主意,因爲的tableView延遲加載的細胞,因此是關閉屏幕的第一個單元格,當被滾動屏幕上,也會得到indexPath.row = 0
,所以現在我每7個電池就有一個「特殊電池」。 我該如何解決這個問題?
第二個問題也源於上述:我有一個定製UIView
放置在所有單元格accessoryView
。當用戶點擊一個「編輯」按鈕時,附件視圖的所有單元應該改變爲表示我們處於「編輯模式」的圖標。在這裏,再一次,這隻發生在屏幕上的單元格,當滾動「舊」單元或者從緩存中取出時,或者構建了不知道我們處於編輯模式的新單元時。
當您點擊一個單元格時,單元格的indexPath.row
毫無疑問會被點擊,您需要將該索引與您的模型數組配對以找出用戶點擊的內容。但是,當TableView操縱單元格時(將它們拉到屏幕上,脫離屏幕,刪除,添加),似乎應用了不同的規則。
我猜,我在問;爲了遵循最佳實踐並且不打擊SDK,我應該怎樣做才能獲得所需的功能以及在Cell生命週期的哪個階段應該應用這種邏輯?
希望有人能指導我在正確的方向:)謝謝提前:)
你使用了什麼TableViewController風格? – 2010-02-25 20:43:05
Ahh在那裏看不到你的問題Rob。 這是一個UITableView,我手動添加到UIViewController。它不使用部分。 像這樣:self.tableView = [[[UITableView alloc] initWithFrame:self.view.bounds] autorelease]; 這是否回答你的問題? – RickiG 2010-02-25 22:06:42
只是將其更改爲: \t self.tableView = [[[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain] autorelease]; 可以肯定:) – RickiG 2010-02-25 22:19:24