views:

387

answers:

1

How can I create a custom scrollbar for a UITableView?

I want to remove the default one that pops up when tracking begins and that disappears when tracking ends. I want, instead, to have one similar to that in a computer program: (a) it's on the right side of the screen and permanently visible; (b) manually scrolling the bar will scroll the UITableView to the appropriate position; (c) scrolling the UITableView will scroll the scroll bar appropriately (without showing the default one that Apple provides).

The difficulty in (b) and (c) is that, as far as I know, Apple only provides methods to scroll to a particular row/section, but not to scroll to three-fourths of the way down a row. So, for example, if I want to scroll the scroll bar, the UITableView will subsequently only scroll to the top of a row/cell. The method I'm talking about is:

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated

Has anyone implemented a custom scroll bar in their UITableView before? Or can someone help me figure out a way to solve the following problems:

  • scrolling to any point in the UITableView instead of to the start of a cell

  • removing the default scroll bar and preventing it from appearing

  • changing the scroll bar image/animation/whatever as the UITableView is scrolled

Thanks!


+1  A: 

UITableView inherits from UIScrollView, that means you can use any of the existing functions. In your case

(void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated

should do the job. It moves the table to any position you want.

To disable the existing scroll indicator, use

table.showsVerticalScrollIndicator = NO;

And to add your own, just add your custom view!

freytag