2013-08-18 7 views
0

UITableViewcontroller 대신 UIViewController를 사용하고 있으며 정적 컨텐츠를 테이블에 추가하는 개념을 이해하는 데 어려움이 있습니다. 정적 콘텐츠가 아닌 동적 콘텐츠를 프로그래밍 방식으로 작성했습니다.UITableViewCell에 정적 컨텐츠 추가

enter image description here

이의 모든 콘텐츠는 테이블 셀의 내부에 "콘텐츠보기 '의 안에 내 데이터 소스를 설정했습니다. 여기

나는 IB 설계 한 것입니다 위임자는 하나의 섹션과 하나의 셀만 반환했습니다. 여기에 셀 코드가 있습니다. 일반적으로 배열을 사용하여이 값을 채 웁니다.하지만 IB에서 정적 콘텐츠를 사용하는 방법을 모릅니다. 개체를 추가하려면 어떻게해야합니까? 그림에서 가장 중요한 것은 각 객체의 위치를 ​​어떻게 유지합니까? 설명서 x, y를 입력 할 필요가 없기를 바랍니다. 좌표.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 


    return cell; 
} 

편집 : 정적 세포가있는 UIViewController 작업 또는 온통로 전환해야합니다 만들 수있는 방법이 있습니다 ....있는 UITableViewController에서 잘 작동?

답변

1

정적 셀에는 UITableViewController를 사용해야합니다.

이것은 내 workaround UIViewController를 사용합니다.

- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier]; 
    } 
    NSString * titol = [NSString new]; 
    NSString * valor = [NSString new]; 
    NSDictionary * el_contacte = [contactes objectAtIndex:(indexPath.row)]; 

    switch (indexPath.row) { 
     case 0: 
      titol = @"Nombre"; 
      valor = [el_contacte valueForKey:@"nombre_contacto"]; 
      break; 
     case 1: 
      titol = @"Teléfono"; 
      valor = [el_contacte valueForKey:@"telefono"]; 
      break; 
     case 2: 
      titol = @"Extensión"; 
      valor = [el_contacte valueForKey:@"extension"]; 
      break; 
     case 3: 
      titol = @"Móvil"; 
      valor = [el_contacte valueForKey:@"movil"]; 
      break; 
     case 4: 
      titol = @"Fax"; 
      valor = [el_contacte valueForKey:@"fax"]; 
      break; 
     case 5: 
      titol = @"email"; 
      valor = [el_contacte valueForKey:@"email"]; 
      break; 

     default: 
      break; 
    } 
    cell.textLabel.text = titol; 
    cell.detailTextLabel.text = valor; 

    return cell; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ 
    NSString * retornar = [NSString new]; 
    switch (section) { 
     case 0: 
      retornar = @"Datos del cliente"; 
      break; 
     case 1: 
      retornar = @"Contacto"; 
      break; 
     case 3: 
      retornar = @"Personas"; 
      break; 
     default: 
      break; 
    } 
    return retornar; 
} 
+0

감사합니다. 기존의 ViewController에 누락 된 기능을 구현하는 방법이나 해결 방법이 있습니까? UITableViewcontroller 클래스로 변경하면 갑자기 화면이 다시 빈 상태가됩니다. –

+0

님이 내 aproach을 추가했습니다. – MiQUEL

0

예, UIViewController에서이 작업을 수행 할 수 있지만 여전히 동적 셀을 사용하지만 정적 인 방법으로 수행합니다. 즉, 스토리 보드에서 셀의 모든 하위 뷰를 설정하고 레이블에 원하는 텍스트를 넣고 이미지 뷰에서 이미지를 표시하는 등의 작업을 수행합니다. 그런 다음 cellForRowAtIndexPath에서 셀을 대기열에서 제외하고 다른 작업을 수행하지 않고 반환합니다. . 서로 다른 내용을 가진 셀이 여러 개있는 경우 각각 고유 한 식별자가있는 다른 동적 프로토 타입을 만들어야합니다. cellForRowAtIndexPath에서 if-else 블록을 사용하여 전달 된 indexPathRow를 테스트하고 해당 위치에서 원하는 올바른 셀 유형을 큐에서 빼냅니다.