2012-01-10 3 views
1

최근 내가, 내가 만든 즉 YellowTileView 클래스를 iOS에서 프로젝트를하고있는 중이 야, 내가 버튼을 클릭하면 같은 일을하고 싶은, 새로운 타일Objective C 프로그래밍에서 생성자를 사용자 정의하는 방법은 무엇입니까?

-(IBAction)ShowImage:(id)sender 
{ 
    YellowTileView *yt=[[YellowTileView alloc] initWithFrame:CGRectMake(0, 0, 60, 80)]; 
    [self.view addSubview:yt]; 
} 

이 잘 작동에 대한 표시됩니다 나를. 그러나 다음 단계는 다른 방법으로 무작위로 추출한 정수를 취하는 것입니다.

내 질문은 내가 직접 initWithFrame 메서드를 재정의하거나 만들 수 있습니까? 그렇다면 어떻게 할 수 있으며 클래스에 드로잉 코드가 있으므로 문제가 될 수 있습니까? YellowTileView?

답변

6

우선 부모의 모든 메소드를 다시 구현할 수 있다는 것을 알아야합니다. 그래서 당신은 다음과 같이 정의 UIView의 초기화 방법을 구현할 수 있습니다

- (id)initWithFrame:(CGRect)frame; 

을하지만 당신은 또한 자신의 매개 변수 목록을 자신의 초기화 방법을 만들 수 있습니다. .H 파일에서

:

- (id)initWithFrame:(CGRect)frame andWithRandomInt:(int)random; 

그리고하는 .m 파일에

:

- (id)initWithFrame:(CGRect)frame andWithRandomInt:(int)random { 
    self = [super initWithFrame:frame]; 

    if (self) { 
     _random = random; 
    } 

    return self; 
} 
3

당신은 절대적으로 할 수 있습니다 - 그것은 다음과 비슷한 모습이 될 것입니다

- (id)initWithFrame:(CGRect)frame andNumber:(int)number { 
    self = [super initWithFrame:frame]; 

    if (self) { 
     myNumber = number; 
    } 

    return self; 
} 

을만큼 당신이 어딘가에 생성자에 super init... 메소드를 호출하면 괜찮을 것 같은.

+0

그래서 내가 아는 나는이 방법으로 작업을 수행 할 수 있습니다 '- (ID) initWithFrame : (CGRect) frame andNumber : (int) number { self = [super initWithFrame : 프레임 및 번호 : 번호]; if (self) { myNumber = number; }' – HebitzLau

+0

아니요 - 수퍼 클래스에'initWithFrame : andNumber :'메소드가 없습니다 - 편집 된 답변보기 :) – deanWombourne

1

또한,이 같이 당신의 방법 이름을 일반적인 관행입니다 :

-(IBAction)showImage:(id)sender 

그래서, 방법 이름은 소문자로 시작합니다. 다른 개발자들이 모두 그렇게하는 것일 필요는 없습니다.

+0

아무것도 없다면 Objective-C에서 오래된 손처럼 보입니다 :-) 역사적 관점, 소문자로 시작하는 낙타의 경우는 Objective-C의 "목표"부분에 대한 영감 인 Smalltalk-80에서 사용 된 표준이었습니다. – Monolo

+0

감사합니다. =) – HebitzLau

+0

그래, 나는 Objective-C의 NeXTSTEP 시대에서 왔어. 그래서 @Monolo는 아주 옳다 ;-) –

관련 문제