Я пытаюсь создать тот же эффект, что и в приложении AppStore для просмотра скриншотов: внутри UITableView у меня есть пользовательские подклассы UITableViewCell. Один из них предназначен для показа предварительного просмотра какого-либо продукта, скажем, 4 изображений. Я хочу, чтобы они отображались так же, как AppStore представляет скриншоты приложения: внутри горизонтального UIScrollView с его подключенным UIPageControl.Горизонтальный UIScrollView внутри UITableViewCell
Так что я добавить мой UIScrollView и мой UIPageControl к моему UITableViewCell, просто так:
@implementation phVolumePreviewCell
- (id)init {
if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kVolumePreviewCellIdentifier]) {
[self setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
[self setSelectionStyle:UITableViewCellSeparatorStyleNone];
previews = [[NSMutableArray alloc] initWithCapacity:4];
for (int i = 0; i < 4; i++) {
[previews addObject:@"dummy"];
}
scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero];
[scrollView setPagingEnabled:YES];
[scrollView setBackgroundColor:[UIColor grayColor]];
[scrollView setIndicatorStyle:UIScrollViewIndicatorStyleBlack];
[scrollView setShowsHorizontalScrollIndicator:YES];
[scrollView setBounces:YES];
[scrollView setScrollEnabled:YES];
[scrollView setDelegate:self];
[self.contentView addSubview:scrollView];
[scrollView release];
pageControl = [[UIPageControl alloc] initWithFrame:CGRectZero];
[pageControl setNumberOfPages:[previews count]];
[pageControl setBackgroundColor:[UIColor grayColor]];
[self.contentView addSubview:pageControl];
[pageControl release];
}
return self;
}
(примечание: Я заселение «превью» с фиктивными данными здесь, только для того, чтобы иметь [предварительные просмотры count], я хочу просмотреть индикатор прокрутки scrollView только для тестовых целей, позже я их скрою).
Моя проблема в том, что я могу прокрутить весь UITableView, содержащий этот phVolumePreviewCell (подкласс UITableViewCell), но я не могу прокрутить UIScrollView. Как я могу это достичь?
Единственная информация, которую я нашел, есть: http://theexciter.com/articles/touches-and-uiscrollview-inside-a-uitableview.html Но это говорит о старых SDK (а именно 2.2), и я уверен, что для этого существует более «недавний» подход.
Некоторые уточнения:
- Я пролистывания UIScrollView с двумя пальцами. Это не то, что я хочу, я хочу, чтобы он мог прокручивать только одним пальцем.
- Когда я прокручиваю двумя пальцами, TableView по-прежнему перехватывает штрихи и немного прокручивается в верхнюю или нижнюю часть. Я бы хотел, чтобы TableView придерживался своего положения, когда касался ScrollView.
Я считаю, что я должен работать, как перехватывать штрихи на мой TableView, и если касание на phVolumePreviewCell (пользовательские UITableViewCell подкласса), передать его в камеру вместо того, чтобы обрабатывать его на TableView.
Для записи, мой TableView создается программно в UITableViewController подкласса:
@interface phVolumeController : UITableViewController <UITableViewDelegate> {
LocalLibrary *lib;
NSString *volumeID;
LLVolume *volume;
}
- (id)initWithLibrary:(LocalLibrary *)newLib andVolumeID:(NSString *)newVolumeID;
@end
@implementation phVolumeController
#pragma mark -
#pragma mark Initialization
- (id)initWithLibrary:(LocalLibrary *)newLib andVolumeID:(NSString *)newVolumeID {
if (self = [super initWithStyle:UITableViewStylePlain]) {
lib = [newLib retain];
volumeID = newVolumeID;
volume = [(LLVolume *)[LLVolume alloc] initFromLibrary:lib forID:volumeID];
[[self navigationItem] setTitle:[volume title]];
}
return self;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kVolumePreviewCellIdentifier];
if (cell == nil) {
cell = [[[phVolumePreviewCell alloc] init] autorelease];
}
[(phVolumePreviewCell *)cell setVolume:volume];
return (UITableViewCell *)cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return kVolumePreviewCellHeight;
}
Спасибо за любую помощь!
Thanks Cyrille !! Та же проблема здесь. Ваше решение сэкономило мне много часов в отчаянии! :-) – 2011-07-10 07:40:41