2010-03-07 3 views
0

나는 똑같은 방법을 사용하여 코드에 몇 가지 다른 클래스를 가졌습니다. 많은 중복 라인이 생겼습니다. 그리고 최근에 문제를 효과적으로 해결할 수있는 카테고리를 추가하는 방법을 발견했습니다. (일반적으로) 같은 전통적인 방법으로 불리는 작은 예제 중 하나를 제공하기 위해, 내 이전의 방법이되었다 : 그것은, 그러나NSTextField 범주 내에서보기에 액세스 하시겠습니까?

@implementation NSTextField(GetFieldValue) 
- (int)valueInTextField 
{ 
    NSTextField *field = [[[self window] contentView] viewWithTag:tagNum]; // DOESN'T LIKE THIS!! 
    return [self intValue]; 
} 
@end 

:

if((thisNum=[self valueInTextField:ctr]) != 0) 
    //... do stuff here... 

- (int)valueInTextField:(int)tagNum 
{ 
    NSTextField *field = [[prizeWindow contentView] viewWithTag:tagNum]; 
    int value = [field intValue]; 

    return value; 
} 

나는 위의 방법을 삭제하고 카테고리를 추가 [[self window] contentView]를 사용하여 textField 자체를 찾으라는 요청을 좋아하지 않으므로 문제의 라인을 삭제하고 다음과 같이 전달하는 것이 유일한 방법입니다.

if([[[[self window]contentView]viewWithTag:ctr] valueInTextField] != 0) 

여기서 내가 성취하려는 것을 볼 수있을 것입니다. 위에서 언급 한 바와 같이 필수 입력란을 식별 할 수있는 카테고리를 얻을 수있는 방법이 있습니까? 즉, 직접 입력하지 않아도됩니다.

답변

2

많은 창 또는 창 컨트롤러에 대해이 방법이 필요하다면 카테고리를 배치 할 적절한 위치는 해당 클래스 중 하나에 있어야합니다. 예 :

@implementation NSWindow(GetFieldValue) 
- (int)valueInTextFieldWithTag:(int)tag 
{ 
    NSTextField *field = [[self contentView] viewWithTag:tag]; 
    return [field intValue]; 
} 
@end 
+0

감사합니다, smorgan. 그게 바로 내가 뭘 찾고 있었는지 :-) 당신의 의견을 감사하십시오! – Bender

2

:-) 미리 감사드립니다 그러나, 그것은 나를 사용하여, 텍스트 필드 찾아 갈 그것을 물어 좋아하지 않는다 [[자기 창]있는 contentView]

당신은 - (int)valueInTextField 방법을 추가 모든 NSTextField 카테고리를 통해.
valueInTextField은 인스턴스 메서드이므로 이미 호출하려면 텍스트 필드 개체가 필요합니다.
텍스트 필드 자체에서 텍스트 필드를 검색하는 것은 의미가 없습니다. (닭고기와 계란 딜레마)

- (int)valueInTextField 
{ 
    NSTextField *field = [[[self window] contentView] viewWithTag:tagNum]; // DOESN'T LIKE THIS!! 
    return [self intValue]; 
} 

으로는 텍스트 필드에 이미있는대로 작동하지 않습니다 여기에 텍스트 필드를 찾고, 위의 설명했다.
그 외에도 어쨌든 여기서 필드 변수를 사용하지 않습니다.

몇 개의 텍스트 필드가 있습니까?
아마도 태그로 검색하는 대신 ivars 및 아웃렛으로 텍스트 필드를 관리하는 것이 더 쉬울 것입니다.

+0

고마워, weichsel. 초보자의 경우 실제로는 textField/string/what의 "내부에있는"개념과 카테고리 작성 ('일반적인'방법과 반대)에 익숙하지 않은 코드 차이는 약간 익숙해졌지만, 이제 이것을 얻었습니다 ... 텍스트 필드의 수에 관해서는 각각 9 개의 개별 필드를 조사하는 2 개의 클래스가 있으므로 간단한 'for'루프를 사용하여 루프를 처리하는 데 유용한 '태그'접근 방식을 발견했습니다. 귀중한 설명 주셔서 감사합니다 :-) – Bender

관련 문제