2009-07-02 2 views
25

Navigation-Based iPhone 앱을 쓰고 있는데 툴바와 탐색 바 사이를 스크롤하는 UITableView를 사용하여 화면 하단에 UIToolBar를 고정시키고 싶습니다.UITableView에 ToolBar를 추가하는 올바른 방법은 무엇입니까?

저는이보기를 처리하는 View Controller가 UITableViewController가 아닌 표준 UIViewController 여야한다고 제안 된 몇 가지 포럼을 보았습니다. 뷰 컨트롤러는 모든 표준 UIViewController 재정의 외에 UITableView 대리자 및 데이터 소스 메서드를 구현해야합니다. 내장 된 기능이 있다면 위의 프로토콜 이외의이 뷰 컨트롤러 하위 클래스에서 재 작성해야 UITableViewController처럼 작동 할 수 있습니까? 이 길로 가면서 잃어 가고있는 것이 있습니까?

또는 표준 UIViewController 내부에 UITableViewController를 중첩하는 것이 더 좋을까요?

답변

49

는 내장 도구 모음을 가지고 보이게하려면.

[self.navigationController setToolbarHidden:NO]; 

implmenting 작성자 :

보기 컨트롤러에서
- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated 

, 당신은 항목을 구성 할 수 있습니다 도구 막대의

더 이상 계층 구조에서 툴바가있는 위치에 대해 걱정할 필요가 없습니다.

(보정 오타)

2

필요한 모든 테이블보기 기능 수준에 필요한 UITableViewDelegate 및 UITableViewDatasource 메서드를 구현하기 만하면됩니다. 이러한 클래스는 관련 프로토콜을 준수해야하지만 이러한 메서드는 모든 클래스에 포함될 수 있습니다. 델리게이트와 데이터 소스는 프로그래밍 방식으로 또는 Interface Builder를 사용하여 UITableView 인스턴스에 설정해야합니다. 문서에 따르면 일부 기능을 잃게됩니다 - overview section을 참조하십시오.

개인적으로 많은 개발자들이 단일 모 놀리 식보기 컨트롤러 클래스에서이 기능을 모두 제공하는 것에 집착하는 것처럼 보이고보기에 테이블보기가 있기 때문에 UITableViewController의 하위 클래스를 사용해야합니다. 그러나 나는 Single Responsibility Principle을 고려해보고 복잡성이 단순하지 않은 경우 데이터 소스를 중단하고 별도의 클래스로 위임합니다. 또한 코드는 특정 UIViewController 구현에 연결되지 않습니다.

별도의 데이터 소스/대리자 클래스가있는 상황에서 필자는 인터페이스 작성기를 사용하고 코드가 아닌 테이블 뷰에 연결하는 경우가 많습니다. 이 접근 방식은 적어도 Dependency Injection의 정신으로 보일러 플레이트 코드를 저장하고 어느 정도 수준의 decoupling을 제공합니다.

이러한 선택은 물론 구현하고자하는 기능의 복잡성에 영향을받습니다. 간단한 구현을 위해 UITableViewController를 사용하여 직접 찾을 수 있습니다. OS 3.0 탐색 컨트롤러로

9

코리 플로이드 "setToolbarHidden"에서의 "B"이다

[self.navigationController setToolbarHidden:NO]; 

되어야한다는

[self.navigationController setToolBarHidden:NO]; 

제외한 대부분 정확 소문자 여야 . animated 매개 변수를 생략하는 것은 너무 작동 보이지만 또한, iPhone OS Reference에 나열된 메소드 이름은

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated 

사실이다.

+0

oops, correct. –

0

이 밖으로 시도 :

self.navigationController.toolbarHidden = NO; 

은 당신을 도움이되기를 바랍니다.

7
//Tool bar 
[self.navigationController setToolbarHidden:NO]; 

UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All" 
               style: UIBarButtonItemStyleBordered 
               target: self 
               action: @selector(selectAll:) ]; 
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)]; 
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ]; 

[ buttonItem release ]; 
[buttonNext release]; 
관련 문제