2012-01-06 4 views
5

정적 테이블 뷰를 만들어 일반 뷰 컨트롤러에 넣으면 정적 테이블 뷰가 UITableViewController에 있어야한다는 오류가 발생합니다.iOS STATIC UITableView와 다른 뷰를 동일한 뷰 컨트롤러에 추가하는 방법

내가 원하는 것은 대부분의 화면을 차지하는 정적 테이블보기가있는 iPad의보기이지만 그 아래의 표준 UIView는 항상 보이는 상태로 유지되며 그 내용을 기반으로 업데이트되는 몇 개의 레이블이 있습니다. 테이블 뷰.

스토리 보드에서 하위 뷰를 추가 할 수 있도록 UITableViewController를 사용하고 tableView가 전체 화면이 아닌 방법이 있습니까?

아니요, 코드로 수행 할 수 있습니까?

팁을 보내 주시면 감사하겠습니다.

답변

0

진짜 대답은 맞춤 컨테이너 컨트롤러를 만드는 것입니다.

예를 들어, 탐색 컨트롤러 내에 정적 테이블보기를 사용할 수 있습니다. 따라서 nav 클래스 또는 컨테이너와 같은 컨테이너 클래스를 만들어 정적 테이블 뷰 컨트롤러를 추가해야합니다.

1

UITableViewController과 정적 인 UITableView을 사용하면 동일한 효과를 얻을 수 있습니다. 표의 맨 아래에 원하는보기를 만들고 UITableViewtableFooterView 속성을 해당보기로 설정하십시오. 이것은 UIView 오브젝트를 라이브러리 밖으로 드래그하여 테이블 뷰의 맨 아래에 추가하여 수행 할 수 있습니다 (하단 영역 강조 표시가 파란색으로 올바르게 표시됨을 알 수 있습니다). 콘텐츠 삽입물을 조정하여 원하는 방식으로 표시 할 수 있습니다.

+0

바닥 글이 바닥에있을 때만 바닥 글이 표시됩니다. 맞습니까? 항상이 시각을 볼 수 있어야합니다. – lnafziger

+0

그레이트 솔루션! 테이블 뷰 섹션 전후에 일반 UIView를 추가 할 수 있습니다. 테이블 뷰 섹션은 기본적으로 다른 뷰와의 통합과 동일하며 실제로 작동합니다. –

1

정적 셀 TableView는 UITableViewController 유형이어야하지만 TableView (또는 2)와 함께 ViewController를 사용하여 동일한 효과를 얻을 수 있으며 "정적 셀"이 될 TV의 cellForRowAtIndexPath 메소드를 직접 처리 할 수 ​​있습니다. . IndexPath.section을 전환하고 원하는대로 셀을 빌드하십시오. 더 확실한 코딩이지만 Apple의 정적 셀 방식을 사용하지 않으려는 경우 동일한 효과와 유연성을 얻을 수 있습니다. 작동하는지

+0

그래, 불행히도 그것은 더 나은 방법을 찾으려고 노력하고 그래서 그것은 많은 행입니다! – lnafziger

2

나는 잘 모르겠지만, 당신도이 방법을 시도 할 수 있습니다 :

  1. 을의 UIViewController 만들기, 예를 BaseViewController (클래스 및 스토리 보드 모두)
  2. 예 : UITableViewController를 만듭니다. MyStaticTableViewController (Storyboard에서만 식별자를 추가하십시오)
  3. Storyboard에서 적절한 크기의 UIView 인스턴스를 BaseViewcontroller에 추가하십시오. myStaticTableView.
  4. 프로그래밍 방식으로 myStaticTableView의 뷰를 myStaticTableView에 추가하십시오.
6

당신이 필요로하는 것은 보통의 UITableViewController입니다 (따라서 모든 정적 셀 동작을 얻습니다). 그러면 테이블보기의 하위보기로 볼 수 있지만 항상 화면 아래쪽에 고정되도록 관리됩니다. Apple은 이것을 WWDC로 시연했습니다. 다음은 내가하는 일입니다. (필자의 예에서는 항상 하단에 고정되어있는 UIDatePicker입니다.) :

viewDidLoad에서보기를 만들고이를 테이블보기의 하위보기로 추가하십시오. 테이블보기의 맨 아래에 놓습니다.

- (void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // Keep the date picker floating above the table view, anchored to the bottom of the view 
    [self updateDatePickerBounds]; 
} 

그리고 제대로보기를 배치하는 기능 구현 :

[self.tableView addSubview:self.datePicker]; 
[self updateDatePickerBounds]; 

당신은 테이블 뷰 스크롤 이제까지 스크린 시간의 바닥에보기를 강제 할 수 있도록 scrollViewDidScroll 구현

- (void) updateDatePickerBounds 
{ 
    // Keep the date picker floating above the table view, anchored at the bottom 
    CGRect tableBounds = self.tableView.bounds; 
    CGRect pickerFrame = self.datePicker.frame; 
    pickerFrame = CGRectMake(tableBounds.origin.x, 
          tableBounds.origin.y + CGRectGetHeight(tableBounds) - CGRectGetHeight(pickerFrame), 
          tableBounds.size.width, 
          pickerFrame.size.height); 
    self.datePicker.frame = pickerFrame; 
} 

마지막으로 테이블보기가 아래쪽보기 아래에 오지 않게하려면 표보기의 contentInset을 너의 8 시야.

또한 updateDatePickerBounds 메서드를 viewWillAppear에서 호출합니다. 내가 왜 그렇게했는지 잊어 버린다.

+2

그래, 그게 내가 말하는거야 - 정적 셀로 설정된 UITableViewController. 설명 된 기술을 사용하여 테이블 뷰 위에 뷰를 플로트 할 수 있습니다. 나는 여러 번 해냈다. –

+0

업데이트 : 사실, updateDatePickerBounds를 호출하는 더 좋은 장소는 viewDidLayoutSubviews입니다. 그런 다음 scrollViewDidScroll을 재정의 할 필요가 없습니다. viewDidLayoutSubviews는 또한 기기 회전 중에 호출되기 때문에 상황도 업데이트됩니다. –

관련 문제