나는 스크린 샷을보기 위해 AppStore 앱과 똑같은 효과를 만들려고합니다. UITableView 안에는 UITableViewCell의 사용자 정의 하위 클래스가 있습니다. 그 중 하나는 일부 제품 (예 : 4 개 이미지)의 미리보기를 표시하도록 설계되었습니다. AppStore가 앱의 스크린 샷을 보여주는 것과 같은 방식으로 보여주기를 바란다 : UISageControl이 부착 된 수평 UIScrollView 내부.UITableViewCell 안에 수평 UIScrollView
그래서 난 그냥 그렇게, 내있는 UIScrollView 내있는 UITableViewCell 내 UIPageControl을 추가
@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;
}
(참고 : 난 그냥 [미리보기를하기 위해 여기 더미 데이터로 "미리보기"를 채우는거야 카운트], 작동하도록 scrollView의 스크롤 표시기를 테스트 목적으로 만 보려면 나중에 숨길 것입니다.
내 문제는이 phVolumePreviewCell (UITableViewCell의 하위 클래스)가 포함 된 전체 UITableView를 스크롤 할 수 있지만 UIScrollView를 스크롤 할 수 없다는 것입니다. 이것을 어떻게 할 수 있습니까?
찾을 수있는 유일한 정보는 다음과 같습니다. http://theexciter.com/articles/touches-and-uiscrollview-inside-a-uitableview.html 하지만 오래된 SDK (즉, 2.2)에 대해 이야기하고 있으며이를 수행하는 데 "최근"의 접근 방법이있을 것입니다.
일부 정밀도 :
- 나는 두 손가락으로있는 UIScrollView를 스크롤 할 수 있습니다. 그게 내가 원하는 건 아니에요, 한 손가락으로 만 스크롤 할 수 있기를 바랍니다.
- 두 손가락으로 스크롤 할 때 TableView는 여전히 터치를 가로 채고 위쪽 또는 아래쪽으로 조금 스크롤합니다. 내가 ScrollView 만질 때 그 위치에 스틱 TableView 싶습니다.
나는 내가있는 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;
}
감사합니다!
감사합니다. Cyrille !! 같은 문제가 있습니다. 당신의 솔루션은 절망적으로 많은 시간을 절약 해주었습니다 !! :-) –
안녕하세요 Cyrille - 이건 오래된 질문입니다.하지만이 솔루션에 대한 샘플 앱이 있는지 궁금합니다. 감사합니다 .. – Craig
@Craig : 샘플 앱이 없습니다, 죄송합니다. 이 코드는 그 이후로 발전했으며 더 이상이 코드를 사용하지 않습니다. 하지만 실제로이 상황을 재현하는 데 필요한 모든 코드가 제 게시물에 있습니다. – Cyrille