2009-07-28 89 views
26

標準分組UITableView風格允許UITableViewCell s在每個部分的頂部和底部繪製圓角。這是如何完成的?細胞如何知道自己在其部分內的位置,以及它如何知道何時更改其圓形邊緣?UITableViewCell如何知道自己的indexPath?

我想我自己的圓形細胞,我有圖片的使用,但不知道什麼時候要顯示的圖像

注:我已經知道的UITableView如何工作的,我知道該怎麼使用它。我只是認爲,因爲UITableView能夠在正確的地方自動繪製圓角,所以我應該可以,而不需要添加任何東西到我的數據源或委託。

回答

8

還有就是UITableViewCellsectionLocation方法,返回整數告訴你你需要什麼:

  • 1 - 中間電池
  • 2 - 頂電池
  • 3 - 底部細胞
  • 4 - 單電池

此方法有效,但沒有記錄,這使得它不太有用。

-1

細胞不知道他們去哪裏......表格視圖有單元格,你是告訴表格視圖單元格內容的單元格。您實現的cellForRowAtIndexPath你DataSource中做到這一點...的方式工作的:

索引路徑具有行和部分

對於分組表視圖

一節涉及到一組,並且該行涉及該節中的1個條目, UITableView知道節中有多少行以及有多少節是DataSources方法numberOfSectionInTableView和方法numberOfRowsInSection,這將對cellForRowAtIndexPath進行正確調用由你來決定哪些部分和行被查詢,並且你需要根據這些特定值來建立你的單元格蒸發散。

一個很好的方法可以做到這一點我可以使用一個字典,其中包含部分名稱和值的NSArray的鍵與該部分中的值。

所以你實施numberOfSectionsInRows會是什麼樣子

return [[dictionary allKeys] count] 

而且numberOfRowsInSection的implmentation會是什麼樣

NSString* key=[[dictionary allKeys] objectAtIndex:sectionNumber] 
    return [[dictionary objectForKey:key] count] 

你總是可以參考的UITableView編程指南在http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/TableView_iPhone/Introduction/Introduction.html 希望幫助

+0

這不是一個特別有用的答案。我已經知道UITableView是如何工作的,而且我知道如何使用它。我只是認爲,因爲UITableView能夠在正確的地方自動繪製圓角,所以我應該可以,而不需要添加任何東西到我的數據源或委託。 – 2009-07-28 15:44:21

+0

Allcells有圓角... – Daniel 2009-07-28 15:46:17

+0

UITableView無法繪製圓角,使UITableCell看起來像它的繪製方法... – Daniel 2009-07-28 15:46:56

-2

只需將屬性添加到您的自定義UITableViewCell(取決於在實現)類包含一個int,NSNumber或NSIndexPath指定它是哪一個。在你使用數據結構的時候,把它放在你的數據結構元素中。然後,只需在創建數據結構時設置屬性,如elt.id = i,然後在cellForRowAtIndexPath中訪問它,如if(elt.id == 0 || elt.id == n-1 )其中n是您的部分中的行數。

我可能完全錯過了你的問題,但如果我做了,只是評論,我會再次發佈。

0

不幸的是,我發現這個問題沒有解決方案,並且已經將UITableViewController和UITableViewCell繼承爲一個通用的解決方案,可以根據需要進行擴展。

0

你不這樣做在單元格中。圓角在[tableView viewForHeaderInSection]和viewForFooterInSection中繪製。

我這樣做的方式是使用普通tableview樣式,然後使用這兩個視圖的圓度和單元格是正常的,沒有回合。

1

如果你需要更強大和一般的東西,看看http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html - 馬特加拉格爾顯示你所需要的,非常有效。他基本上從UIViewController重新創建UITableViewController,同時添加使用自己的自定義圖形的能力。我只是將這個應用到我的項目中,到目前爲止它看起來可以完成這項工作。

0

沒有進入誰繪製什麼,你可以非常容易地知道哪個單元格是cellForRowAtIndexPath的最後一個單元格。

你傳遞給你需要提供的單元格的indexPath,對吧?你也傳遞了tableView。

調用[tableView numberofRowsInSection:indexPath.section],如果它是==([indexPath.row] -1),那麼您知道您被要求提供該部分中的最後一個單元格。

當時的cellForRowAtIndexPath被調用時,電池是保證在indexPath傳入。

4

您可以使用

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell 

此問題。在我的示例中,我正在使用它將單元格(帶有自定義內容)滾動到視圖頂部。

61
NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell: self]; 
int rows = [(UITableView *)self.superview numberOfRowsInSection:indexPath.section]; 

if (indexPath.row == 0 && rows == 1) { 
// the one and only cell in the section 
} 
else if (indexPath.row == 0) { 
//top 
} 
else if (indexPath.row != rows - 1) { 
//middle 
} 
else { 
//bottom 
} 
32

這很簡單。假設細胞是對象,其位置將被發現。

UITableView* table = (UITableView *)[cell superview]; 
    NSIndexPath* pathOfTheCell = [table indexPathForCell:cell]; 
    NSInteger sectionOfTheCell = [pathOfTheCell section]; 
    NSInteger rowOfTheCell = [pathOfTheCell row]; 
0

要在達倫的答案擴大(這是我發現的最有用的,感謝達倫!),你可以做的是通過所有的superviews'的迭代,直到找到父母的UITableView。這應該是未來的證明,因爲你不依賴於固定的視圖層次。

我用,如果它發現一個或返回零,如果是沒有的,這將返回UITableView的遞歸方法。

- (UITableView *)parentTableViewOf:(UIView *)view { 
     Class class = [view.superview class]; 
     NSLog(@"Class : %@", NSStringFromClass(class)); 

     if([view.superview isKindOfClass:[UITableView class]]) { 
      return (UITableView *)view.superview; 
     } else { 
      return [self parentTableViewOf:view.superview]; 
     } 

     return nil; 
} 

到目前爲止,我已經使用了這個,它似乎沒有打嗝的工作。希望能幫助到你! :)

相關問題