2009-12-31 3 views
2

UITableViewController 하위 클래스를 만들었습니다. 하나의 컨트롤러 만 필요합니까? 그 하나의 하위 클래스의 여러 인스턴스를 인스턴스화합니까?iPhone 드릴 다운 응용 프로그램에서 무한정의 TableViews를 처리하는 방법

내가 만드는 iPhone 앱은 사람들 목록의 표부터 시작합니다. 사용자가 사람을 두드리는 경우, 새로운 테이블이 자신이 일한 회사 목록과 함께 푸시됩니다. 그런 다음 사용자가 회사를 탭하면 작업 위치 목록이 표시됩니다. 그리고 그들이 위치를 탭하면 그 위치를 지닌 사람들의 목록을 볼 수 있습니다. 이것은 영원히 계속 될 수 있으며 사용자는 항상 목록을 백업 할 수 있습니다.

App Delegate는 네비게이션 컨트롤러와 테이블 뷰 컨트롤러를 인스턴스화 한 다음 네비게이션 컨트롤러에 푸시합니다. 그러나 사용자가 한 행을 탭하면 이제 TVC는 다른 TVC를 만듭니다.

  1. 는 그 권리인가 또는 AppDelegate에 모든 TVC의 인스턴스화해야 하는가? 아니면 이후에 작동합니까? 모두 컨트롤러에 푸시됩니다.

  2. 각 테이블 뷰 인스턴스 는 다른 이름을 가질 필요가 있는가 또는 모두 'mainTVC'또는 같은 뭔가를 호출 할 수 있습니까?

    tableViewController *mainTVC = [[tableViewController alloc] init]; 
    
  3. 메모리가 부족합니까? 은 에서 2 또는 3 레벨 떨어진 곳에서 테이블보기 을 삭제하기 시작해야하며 사용자가 백업 한 경우 다시 작성해야합니까?

답변

1

각 유형에 대한보기 컨트롤러를 만들 것입니다. 아마도 사용자 지정 테이블 뷰 셀과 같은 특별한 디스플레이 특성을 사용하여 작업 위치를 약간 다르게 표시 한 다음 사람 이름을 지정하려고 할 것입니다.

그 외, @Ben Gottlieb의 대답은 꽤 잘 작동합니다. 많은 뷰 컨트롤러를 사용하고 didReceiveMemoryWarning: 메서드를 처리하십시오.

한 가지 더, 사용자는 지금까지 당신은 그들이 당신에 스택을 재설정 할 setViewControllers:animated:UINavigationController 방법을 사용할 수 있습니다 (일종의 실행 취소 스택있는 같이) 다시 모든 길을 갈 수 없을거야 말하고 싶은 것을 드릴 다운하는 경우 (예를 들어 15의 '실행 취소 버퍼'를 구현하려면 15 개). 이 방법을 사용하면 첫 번째보기 컨트롤러가 항상 루트보기 컨트롤러이고 나머지는 모든 드릴 다운 인스턴스입니다.

3

여러 TableView를 만들 필요가 없습니다. 과거에 해왔 던 작업은 단순히 다른 데이터 소스에 다시 바인드하는 것입니다. 그래서 하나의 TableView를 유지하고 사람, 회사 등을위한 데이터 소스를 가지고 ...

+0

감사합니다. 그러나 새로운 데이터를 오른쪽에서 밀어 넣으면서이 작업을 수행하고 여전히 움직일 수 있습니까? – Andrew

+0

당신이 할 수있는 것은 오직 하나의 tableView로 시작하는 것입니다. 사용자가 새 dataSource로 이동하면 테이블의 데이터 소스를 간단히 바꿉니다. [myTableView reloadData]를 사용하여 다시로드하는 대신 모든 섹션에 대해 다음을 사용합니다. [aTableView reloadSections : [NSIndexSet indexSetWithIndex : 0/* 섹션] ] withRowAnimation : UITableViewRowAnimationRight]; – pop850

1

옵션 번호 (2)가 좋아 보인다. 메모리가 문제가되기 전에 많은 수의 뷰 컨트롤러를 스택에 밀어 넣을 수 있습니다. 시스템은 didReceiveMemoryWarning : 메소드에서 헤비급 메모리 돼지 (보기)의 대부분을 정리합니다. 많은 메모리 내장 구조를 작성하는 경우 해당 메소드에서 해당 구조를 정리할 수 있습니다 (상속 된 메소드를 호출해야 함).

1

세 번째 질문에 대답하려면 거대한 데이터 저장소가 메모리에없는 한 메모리가 문제가되지 않아야합니다.어떤 상황에서도 테이블 뷰를 "드롭"하지 않아야합니다. 이로 인해 충돌이 발생할 수 있습니다 (어쨌든 탐색 스택에 FILO가 아닌 추가/제거를 수행 할 방법이 없습니다). 메모리 부족으로 인해 캐시와 같은 "중요하지 않은"항목 만 해제해야합니다. 그러나 이것은 문제가되어서는 안됩니다.

또한 레벨이 3 단계 이상인 경우 UI를 다시 생각해 볼 필요가 있습니다. 사용자가 10 단계 아래로 드릴 다운하면 스택을 다시 탐색하는 것이 지루할 것입니다.

관련 문제