2011-12-31 57 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