2009-12-02 4 views
0

나는 (embarrassingly) 많은 시간을 보냈다는 간단한 요청이있다.UITableView를 초기화하는 방법? 모두 XIB 및 프로그래밍 방식으로?

나는 몇 가지 기능을 추가하기 위해 UITableView를 하위 분류했다. 이 새로운 기능은 할당/초기화가 필요한 NSMutableSet과 같은 것을 필요로합니다.

내가 해결하기 위해 사과 문서에서 이해

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { 

내 객체의 초기화 루틴을 넣어 가지고 -하지만 이것은 (코드에 브레이크 포인팅에 의해 결정)가 호출되지 않습니다.

나는 IB를 사용하고 있으며 UITableView을보기로 드래그하여 클래스를 새 하위 클래스로 변경했습니다. UITableViewController은 없습니다. 나는 또한 시도 :

- (void)loadView { 
- (id)init { 
- (id)initWithFrame:(CGRect)frame { 

을 성공하지. IB와 함께 그리고 프로그래밍 방식으로이 수업을 진행하고 싶습니다. 이 초기화 위치를 제외한 모든 것이 작동합니다 ..

답변

6

개체가 XIB 파일에서로드 될 때 -(id)initWithCoder:(NSCoder*)coder이됩니다.

당신은 XIBs에서 객체를 생성하는 경우 및 프로그래밍, 각 하나에 모든 초기화 물건을, 지정된 초기화 모두에게 -initWithFrame:style:-initWithCoder:를 구현해야합니다.

두 사람을 동기화 상태로 유지하는 것은 고통 스러울 수 있습니다. 따라서 대부분의 사람들은 초기화 작업을 개인적인 방법 (일반적으로 -commonInit)으로 나눠야합니다.

일부 Apple 샘플 코드에서 작동중인 예를 볼 수 있습니다 : HeadsUpUI. 실제로하지 필요할 때 그들이 코코아 또는 코코아 터치에 익숙 할 때 사람들이 만드는 것이

- (void)commonInit 
{ 
    self.userInteractionEnabled = YES; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     [self commonInit]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if (self = [super initWithCoder:aDecoder]) 
    { 
     [self commonInit]; 
    } 
    return self; 
} 
+0

Perfect - 감사합니다. Paul. 문서와 온라인에서 얼마나 오랫동안 그 내용을 찾으려고 노력했는지 알 수 없습니다. 나는 주어진 클래스의 행동/속성을 찾기 위해 수퍼 클래스의 전체 계층 구조를 따라 가야한다는 것은 좌절감없이 불가능하다는 것을 알았다. 잘하면, 나는 도움이 될 것입니다 작은 규칙을 배울 것입니다 - 난 Obj - C에 상당히 새로운 것입니다. 다시 한 번 감사드립니다. 대단히 감사드립니다. – DefenestrationDay

1

한 일반적인 실수는 하위 클래스입니다. 나는 커스텀 윈도우, 테이블 뷰, 스크롤 뷰, 그리고 결코 작성된 적이없는 이미지 뷰의 많은 예제를 보았습니다.

UITableView에 어떤 기능을 추가하고 있습니까? 델리게이트 메서드를 통해 또는 사용자 지정 셀 클래스를 사용하여 수행 할 작업을 수행 할 수 없다는 것이 확실합니까?

+0

섹션 헤더가 탭될 때 위임자에게 메시지를 보내도록 표준 UITableView를 추가했습니다. (나는 공간을 줄이기 위해 그 부분을 줄이기 위해 그것을 사용하고있다). 조언을 고맙게 생각합니다 .. 감사합니다 .. – DefenestrationDay

관련 문제