UIViewController에 포함 된 UITableView에서 정적 셀을 시각적으로 만들고 사용하는 방법
XCode 4.2를 사용하고 있으며 Storyboard를 사용하여 UI를 구축했습니다. UITableView 위와 아래에 콘텐츠가있는 뷰를 만들어야하며 UIViewController를 사용하여이 작업을 수행 할 수 있습니다. UITableViewController를 사용하면 테이블 위 또는 아래에 콘텐츠를 추가 할 수 없습니다. 표 머리글 / 바닥 글을 사용할 수 있지만 내가 원하는 작업에는 작동하지 않습니다.
이제 UITableView가 포함 된 UIViewController가 있습니다. 내가 찾고있는 UI 레이아웃을 제공하는 UITableView의 높이와 너비를 조정할 수 있습니다.
UITableView에서 정적 셀을 사용자 지정할 수 있지만 빌드하려고하면 다음 오류가 발생합니다.
잘못된 구성 : 정적 테이블보기는 UITableViewController 인스턴스에 포함 된 경우에만 유효합니다.
내 질문은 다른 사람들이이 문제를 어떻게 해결하고 있습니까? 정적 셀로 테이블 뷰를 만들고 시각적으로 배치하는 것은 매우 좋지만 분명히 이해할 수없는 이유로 허용되지 않습니다. 내 시각적 레이아웃 요구 사항 때문에 UITableViewController로 전환 할 수 없습니다.
도움을 주시면 대단히 감사하겠습니다.
당신이 옳습니다. 스토리 보드에서는 viewController에 포함 된 정적 셀이있는 tableView를 가질 수 없습니다. 한 가지 방법은 (내가 직접 시도하지 않았으므로 작동하는지 확실하지 않습니다) 정적 셀이있는 스토리 보드에 UITableViewController의 인스턴스를 만드는 것입니다. UIView의 인스턴스를 viewController에 추가 한 다음 UITableViewController의 tableView를 프로그래밍 방식으로 viewController의 UIView에로드합니다.
앱이 iOS 6 이상을 대상으로한다고 가정하면 Xcode 4.5 이상 버전에서이 작업을 수행 할 수 있습니다.
Storyboard에서 메인 뷰 내부에 뷰 컨테이너가있는 UIViewController를 생성하기 만하면됩니다. 그런 다음 해당 뷰 컨테이너를 정적 셀이 포함 된 UITableViewController에 연결합니다.
다음과 같이 :
한 줄의 코드가 필요하지 않습니다. 클릭, 드래그 및 임베드를 선택하기 만하면됩니다. 뷰 컨트롤러 포함이 처리됩니다.
pmd의 답변은 작동하지만 iOS 5와의 하위 호환성이 필요한 경우 View Containment API를 사용하여 프로그래밍 방식으로 임베딩을 수행 할 수 있습니다.
부모 UIViewController의 viewDidLoad 메서드에서 :
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
MyTableViewController* vc =[storyboard instantiateViewControllerWithIdentifier:@"MyTableVC"];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
// ensure embedded view is aligned to top
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
vc.view.frame = frame;
[vc didMoveToParentViewController:self];
}
정적 셀을 사용하여 UITableViewController에 대한 스토리 보드 ID를 지정하는 것을 잊지 마십시오.
나는 이것이 오래된 질문이라는 것을 알고 있지만이 문제에 대한 해결책이 있습니다.
UIViewController에 3 개의 정적 셀이 필요했기 때문에 다음과 같이했습니다.
- 일부 테이블보기 셀을 인터페이스 (UITableView가 아닌)로 끌어서 놓으십시오. 텍스트와 필요한 다른 것을 추가하십시오.
- 세포에 대한 IBOutlet 속성을 만들고 합성합니다.
- 버튼을 드래그하여 전체 셀을 덮으십시오. 버튼을 '사용자 정의'를 입력하여 보이지 않게 설정하십시오. 모든 셀에 대해 반복하십시오.
- 버튼에 숫자 태그 추가
다음 기능을 구현하십시오. buttonDown은 'Touch Down'버튼 이벤트에 연결됩니다. buttonUp은 'Touch Up Inside' 및 'Touch Up Outside'에 연결됩니다.
-(IBAction)buttonDown:(id)sender { if ([sender tag] == 1) { myFirstCell.selected = YES; } else if ([sender tag] == 2) { mySecondCell.selected = YES; } else if ([sender tag] == 3) { myThirdCell.selected = YES; } } -(IBAction)buttonUp:(id)sender { myFirstCell.selected = NO; mySecondCell.selected = NO; myThirdCell.selected = NO; }
buttonDown 이벤트에서 원하는대로 다른 작업을 수행하고 버튼을 사용하여 새보기로 직접 이동할 수 있습니다. 나는 이것이 매우 유용하다고 생각합니다.
정적 셀이 무엇을 의미하는지 잘 모르겠지만 IB에서 셀을 빌드 한 다음 tableView에서 사용하려는 경우 .nib의 이름을 전달하여 cellForRowAtIndex
호출 할 수 있습니다. loadNibNamed
매개 변수로 셀에 대해 생성 한 파일. outlet
셀의 .nib에 매핑되는 viewController 가 있는지 확인하십시오 . 그것이 당신이 달성하려는 것이라면 이러한 방향으로 탐색하십시오.
동적으로 만든 다음 스크롤을 전환 할 수 있습니다.
[yourTableName setScrollEnabled:NO];
'programing' 카테고리의 다른 글
체크 박스가있는 Android ListView 및 모든 클릭 가능 (0) | 2021.01.17 |
---|---|
ggplot2 scale_brewer의 역순 (0) | 2021.01.17 |
redis cli를 사용하여 명령 배치 실행 (0) | 2021.01.17 |
인수가있는 여러 줄 문자열. (0) | 2021.01.17 |
피클 파일에 여러 개체를 저장하고로드 하시겠습니까? (0) | 2021.01.16 |