2011-12-31 97 views
2

我想要做的是自定義UITableView索引的外觀。經過一番搜索後,我得出這樣的結論:這是不可能的,我必須定製一個視圖來完成類似下面的屏幕截圖。UITableView與自定義索引視圖

example http://img705.imageshack.us/img705/8573/57screenshot20111231at9.png

我的表視圖中沒有的部分,所以我想要做的是滾動一「頁」向下或向上的時候,小點的一個被竊聽。另外,我希望用戶能夠在視圖上輕掃,以便像標準表視圖索引一樣快速跳過頁面。

我將不勝感激,如果您向我提供一個類似於此的示例或至少從一些指導方針開始。

回答

4

只要你不介意'點'是一個固定的顏色,這確實可以用已經提供的方法來完成。您只需要使用2種方法:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index; 

您還需要一個UIImageView保存您在選定的「點」透明圖像。

在第一種方法中,返回NSArray,格式爲:[NSArray arrayWithObjects:@".", @".", ..., @".", nil];。這將在側欄中以「點」形式輸入,其中每個點代表UITableView的1個部分。當用戶點擊其中一個'點'時,UITableView將移動到相應的部分。由於您希望各部分的頁面長度爲1頁,因此請相應地對數據進行分段。

至於第二種方法,這是您調整UIImageView的框架,其中保持覆蓋選定點的透明圖像。只需將.frame.屬性更改爲與新選定的部分對齊即可。你需要做一些數學來排列這個,但這很容易。

您還需要使用UIScrollViewDelegate方法來處理在用戶滾動時移動透明圖像。它們是:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView; 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; 

,這將使你有UIImageView移動到相應的部分,而用戶正在滾動。再次,你將不得不做一些數學來完美排列一切。

希望有助於!

+0

非常感謝。將嘗試。我唯一的問題是我的TableView是一個單獨的部分。如果我將它分成多個部分,是否必須爲每個部分設置一個標題,或者我可以將它顯示爲一個大部分? – 2012-01-04 09:52:44

+0

您不需要每個部分的標題。只需在' - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;'方法中返回'nil'。 – msgambel 2012-01-04 17:17:53