只要你不介意'点'是一个固定的颜色,这确实可以用已经提供的方法来完成。您只需要使用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
移动到相应的部分,而用户正在滚动。再次,你将不得不做一些数学来完美排列一切。
希望有助于!
非常感谢。将尝试。我唯一的问题是我的TableView是一个单独的部分。如果我将它分成多个部分,是否必须为每个部分设置一个标题,或者我可以将它显示为一个大部分? – 2012-01-04 09:52:44
您不需要每个部分的标题。只需在' - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;'方法中返回'nil'。 – msgambel 2012-01-04 17:17:53