programing

UIViewController에 포함 된 UITableView에서 정적 셀을 시각적으로 만들고 사용하는 방법

shortcode 2021. 1. 17. 11:16
반응형

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 개의 정적 셀이 필요했기 때문에 다음과 같이했습니다.

  1. 일부 테이블보기 셀을 인터페이스 (UITableView가 아닌)로 끌어서 놓으십시오. 텍스트와 필요한 다른 것을 추가하십시오.
  2. 세포에 대한 IBOutlet 속성을 만들고 합성합니다.
  3. 버튼을 드래그하여 전체 셀을 덮으십시오. 버튼을 '사용자 정의'를 입력하여 보이지 않게 설정하십시오. 모든 셀에 대해 반복하십시오.
  4. 버튼에 숫자 태그 추가
  5. 다음 기능을 구현하십시오. 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];

참조 URL : https://stackoverflow.com/questions/8945728/how-to-visually-create-and-use-static-cells-in-a-uitableview-embedded-in-a-uivie

반응형