2011-09-16 4 views
0

커스텀 섹션 헤더를 그리는 UITableView의 서브 클래스가 필요하다. 나는 다음과 같이 tryed했다.서브 클래 싱 된 UITableView

#import <UIKit/UIKit.h> 
@interface MyTableView : UITableView 
@end 
@implementation MyTableView 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    //my drawing code goes here 
} 
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    //returns the height 
} 
@end 

그러나이 클래스를 사용하면 일반 헤더가 그려진다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

이러한 기능을 서브 클래 싱없이 컨트롤러에 직접 설정하면 올바르게 작동합니다.

업데이트 : 나는 이미 필요한 클래스를 작성하는 클래스를 변경하는 것이 빠를 수 있기 때문에 이미 UITableView를 사용하는 많은 클래스가있다. 서브 클래스를 만들고 싶다. 클래스를 변경하여 타이틀을 어떻게 바꿀 수 있습니까?

답변

2

이 방법은 UITableView에서하지, 그들은 UITableViewDelegate에서입니다.

컨트롤러를 가리키는 UITableViewdelegate 속성을 설정했거나 자동으로 설정된 tableview 대리인이있는 UITableViewController을 사용 중이기 때문에 컨트롤러에서 작동합니다. 실제로 사용자 정의 클래스 대신 UITableView이 구현되어 있으므로 UITableViewController을 사용하는 것이 더 나쁩니다.

편집 : 불행하게도, 그 섹션 헤더보기를 변경하는 UITableView 클래스에서 사용되는 delegation pattern에, 그것은 간단하지 않습니다 때문에 행동의이 종류를 구현하는

이러한 "도우미"방법을 제공하고 그 일을하는 한 가지 방법 클래스를 만든 다음 대리자 메서드가 실행될 때이 메서드를 제대로 호출하도록 각 컨트롤러에 대리자를 구현합니다.

이 방법을 사용하면 코드를 훨씬 더 명확하게 만드는 UITableView을 서브 클래스 화하는 대신 이러한 방법으로 범주를 사용하는 것이 좋습니다.

UITableView 대리자를 사용자 지정 클래스로 설정하고 cellForRowAtIndexPath과 같이 컨트롤러에 계속 발생시키려는 호출에 대해 다른 대리자를 만든 다음이 새로운 대리자 메서드를 tableview에 호출하자 메서드를 실행하지만 이것은 최악의 해결 방법입니다.

+0

그럼 어떻게 문제를 해결할 수 있습니까? 내 업데이트를 참조하십시오. – Daniel

+0

@ dkk 방금 몇 가지 가능한 해결책으로 답변을 업데이트했습니다. –

1
당신이 TableView을 구현하는 이유를 이해가 안

하지 MyTableView :

@implementation MyTableView 

UPDATE : 올바르게 해당 테이블의 dataSourcedelegate 속성을 설정하면

확인합니다. 당신은 UITableViewController에서 서브 클래 싱해야

:

UPDATE2 당신이 UITableView 클래스를 상속하기 때문에 이런 일이

@interface MyTableView : UITableViewController 
@end 
+0

나는 그것을 수정했다. – Daniel

+0

그리고 여전히 작동하지 않습니까? 속성을 확인하십시오'dataSource' 및'delegate' – Nekto

+0

그냥 잘못 입력 했으므로 .. 아직 작동하지 않습니다 : ( – Daniel

0

UITableViewController를 서브 클래스 화하고 viewForHeaderInSection 및 heightForHeaderInSection을 처리 한 다음 MyTableViewController를 사용자 지정 헤더가있는 각 테이블 뷰의 기본 클래스로 사용할 수 있습니다.그러나 viewForHeaderInSection은 UILabel을 생성하는 데 필요한 정보가 필요하거나 헤더를 표시하는 데 사용할 정보가 있어야하므로 NSArray가 채워지는 것처럼 하위 클래스에 일관된 코드가 필요합니다. 헤더에 대해 원하는 문자열 또는 viewForHeaderInSection에서 호출 할 수있는 메서드

관련 문제