2014-01-17 5 views
0

(수평 날짜 선택을 허용하기 위해) 새로운 사용자 정의 UIView을 개발하려고합니다. XIB 파일에서 모든 UI 디자인을 수행하고 싶습니다.UIScrollView가없는 사용자 정의 UIView 위젯

사용자 정의 UI보기에는 스크롤보기와 두 번의 '주'보기가 있습니다. 아이디어는 스크롤링이 발생하면서 두 가지 '주간'뷰를 제자리로 이동시키고 올바른 날짜로 재구성하여 날짜 선택을위한 '무한'스크롤을 생성합니다.

UIView을로드 한 다음 scrollview 및 week 뷰 (모두 XIB에서 설계됨)를로드 할 수 있습니다.

UIView 클래스에서 파생 된 내 DatePickerView 클래스는 스크롤 뷰 (두 주 뷰를 포함)의 addSubview을 수행합니다. 스크롤 뷰는 320 넓이이며 contentSize는 640 너비로 설정됩니다. UserInteraction이 사용 가능합니다. 수평 주사가 가능합니다.

이 모두가 작동하고 화면에 표시됩니다. 주보기에는 각각 7 개의 단추가 있습니다. 나는 그들을 압박 할 수 있고, 그들은 접촉을 얻을 수있다. 그러나 scrollview 스크롤하려는 것 같지 않습니다.

사용자 설정보기를 UIScrollViewDelegate으로 설정했습니다. scrollViewDidScroll으로 전화가 걸리지 않습니다.

각 주보기의 경우 '컨테이너'보기와 버튼이 있습니다. 컨테이너 뷰에 다음을 추가했습니다 (다시 UIView에서 파생 됨).

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    DDLogInfo(@"Began. Next Responder: %@", self.nextResponder); 
    [self.nextResponder touchesBegan:touches withEvent:event]; 
} 

(다른 터치 이벤트는 touchesMoved, touchesEnded, touchesCancelled과 비교 것들), 나는 UIScrollView 인 nextResponder을, 인쇄, 그래서 내가 터치를 보내고 있음을 알고 볼 수 있지만 scrollview 스크롤 싶지 않아.

touchEvents를 응답기 체인에 전달하는 제 방법이 맞습니까?
스크롤을 작동 시키려면 구성해야 할 것이 있습니까?

도움을 주시면 감사하겠습니다.

찰리

+0

어떻게 될까요? –

답변

1

정확하게 이해하면 스크롤보기가 3 페이지 인 무한 스크롤이 필요합니다. 내 캘린더보기 프로젝트에서 비슷한 효과를 얻었습니다. 현재 DPCalendar

간단히 말해서에서 체크 아웃 할 수 있습니다, 나는

@interface DPCalendarMonthlyView : UIScrollView 

같은 뷰를 생성 그리고이

[self.pagingViews addObject:[self singleMonthViewInFrame:self.bounds]]; 
[self.pagingViews addObject:[self singleMonthViewInFrame:CGRectMake(self.bounds.size.width, 0, self.bounds.size.width, self.bounds.size.height)]]; 
[self.pagingViews addObject:[self singleMonthViewInFrame:CGRectMake(self.bounds.size.width * 2, 0, self.bounds.size.width, self.bounds.size.height)]]; 
같은 세 가지보기를 만들이

self.showsHorizontalScrollIndicator = NO; 
self.clipsToBounds = YES; 
self.contentInset = UIEdgeInsetsZero; 
self.pagingEnabled = YES; 
self.delegate = self; 

처럼 초기

그런 다음 콘텐츠 크기를 설정하고 t로 스크롤합니다. 그는있는 ScrollView 위임 기능에

[self setContentSize:CGSizeMake(self.bounds.size.width * 3, self.bounds.size.height)]; 
[self scrollRectToVisible:((UIView *)[self.pagingViews objectAtIndex:1]).frame animated:NO]; 

가운데, 나는

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender 
{ 
    //If scroll right 
    if(self.contentOffset.x > self.frame.size.width) 
    { 
     //do something if scroll right 
    } else if(self.contentOffset.x < self.frame.size.width) 
    { 
     //do something else if scroll left 
    } else { 
     return; 
    } 
    //scroll back to the middle 
    [self scrollRectToVisible:((UICollectionView *)[self.pagingViews objectAtIndex:1]).frame animated:NO]; 
} 

희망이 당신에게 유용 할 필요가있다.

+0

답장을 보내 주셔서 감사합니다. 내 문제는 XIB와의 상호 작용에 관한 것이 었습니다. autoLayout이 내 친구가 아니란 것 같습니다. – Charlie

0

이 경로를 따르는 사람들에게 나는이 사실을 알았고 어리석은 오류였습니다. AutoLayout을 끄는 것을 잊었습니다. Apple이 NIB의 '문서'수준에서 autoLayout을 사용/사용 안 함 옵션으로 지정했음을 잊고 있습니다.

끄고 디자인대로 작동합니다. autoLayout처럼보기를 다시 스크롤해야 할 필요가 없도록 재배치하는 것처럼 보입니다.