2012-06-25 5 views
0

나는 이것이 초보자 질문은 알고 있지만 내가 지금 여기 안돼서 간다 :UILabel의 서브 클래스

내가 내 응용 프로그램을 통해 Chalkduster 글꼴을 꽤 많이 사용하는 (등 버튼, 라벨)을 바라고에 UILabel의 서브 클래스 시도 이것을 달성하십시오. 나는 Default.h에 다음과 같은 한 :

#import <UIKit/UIKit.h> 

@interface Default : UILabel 
{ 
UILabel *theLabel; 
} 

@property (nonatomic, strong) IBOutlet UILabel *theLabel; 

@end 

이 내하는 .m에 :

#import "Default.h" 

@implementation Default 

- (id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 
    // Initialization code 


UIFont *custom = [[UIFont alloc] init]; 

custom = [UIFont fontWithName:@"Chalkduster" size:18]; 

self.font = custom; 


NSLog(@"h"); 
} 
return self; 
} 

@end 

내가 인터페이스 빌더에서 클래스를 변경하고 실행하면, 나는 Chalkduster 글꼴을 확인할 수 없습니다. 나는 그것이 많은 시간을 절약 할 것이라고 믿는 것처럼 이것을 설정하는 데에 감사 할 것입니다. 건배.

답변

11

일부 문제를 오버라이드 (override) 할 필요가 펜촉에서보기를 직렬화 복원 : 당신은 혼합하고)

1 Default이고 레이블은 Default이고 레이블은입니다. 하위 클래스를 만들려면 클래스 내부의 속성을 제거하고 theLabel (if (self) { 섹션 내부)이 아닌 self으로 변경하십시오.

2) 무조건 return을 코딩 한 모든 것은 실행되지 않을 것입니다. 컴파일러가 이러한 진술에 대해 불평하지 않은 것에 놀랐습니다.

편집 : ... 방금 나에게 일어난 한 가지 더.

당신이 XIB 또는 스토리 보드에서로드하는 경우 초기화가 너무 대신 initWithFrame:initWithCoder:에 의해 이루어집니다

3) :

모든
- (id)initWithCoder:(NSCoder *)coder { 
    self = [super initWithCoder:coder]; 
    if (self) { 
     self.font = [UIFont fontWithName:@"Chalkduster" size:18]; 
    } 
    return self; 
} 
+0

나는 또한 라벨을 자기 자신으로 바꾸려고 시도했다. 나는 여기서 매우 단순한 무언가를 놓치고 있다고 확신한다 ... –

+0

새로운 코드는 어떻게 생겼는가? 'self'의 폰트가 만들어 질 때 그것을 변경하고 IB에서'Default'를 사용한다면, 작동해야합니다. –

+0

위에서 설명한 것처럼 return self를 아래로 이동 했으므로 .h의 속성과 변수도 삭제했습니다. @synthesize도 삭제되었습니다. NSLog 문을 사용하여 시도했지만 나타나지 않습니다. 또한보기 컨트롤러 내에 기본으로 # import 문을 포함 시켰습니다 ... 나는 여전히 간단한 것을 놓치고 있습니까? 내 어리 석음이나 다른 가정하지 마십시오 :) –

3

return self; 세 줄을 아래로 이동하십시오. 사용자 정의 초기화를 수행하기 전에 init 메소드에서 리턴합니다.

편집 코멘트에서 새로운 정보를 반영하기 :

당신은 또한 수정 initWithCoder:

+0

설명대로 줄을 움직이려고했지만 여전히 작동하지 않았습니다. 인터페이스 빌더에서도 뭔가해야합니까? –

9

우선 당신은 UILabel를 서브 클래스 있다는 것을 생각하지 않는다 정정하십시오. 그래서 당신이 그것을 어떻게하는지 설명하는 튜토리얼을 만들었습니다. 서브 클래 싱 된 IBOutlet 객체가 필요하지 않습니다. 자기와 그냥 부르세요. 예를 들어 : 당신은 UILabel이 작업을 수행 서브 클래스하려면 self.font = ... :

이 같은 제목 myLabel 새로운 클래스 만들기 :

.H

#import <UIKit/UIKit.h> 

@interface MyLabel : UILabel { 

} 

@end 

하는 .m

#import "MyLabel.h" 

@implementation MyLabel 

-(void)awakeFromNib { 

    UIFont *custom = [[UIFont alloc] init]; 
    custom = [UIFont fontWithName:@"Chalkduster" size:18]; 

    self.font = custom; 
} 

@end 

이제 스토리 보드에서 라벨을 선택하고 들여 쓰기 검사기으로 이동하고 사용자 정의 클래스에서 위의 생성 된 클래스를 선택하십시오.이처럼 :

Screenshot

출력 :

Screenshot 2

참고 : 당신은 그것을 할당되기 때문에 사용자 지정을 해제하는 것을 잊지 마십시오.

+0

이것은 또한 나를 위해 일했다. 노력해 주셔서 대단히 감사합니다. 이것은 훌륭한 튜토리얼입니다 –

+0

@RobW 당신을 도왔다 고 다행입니다. –

관련 문제