2010-01-21 5 views
1

아이폰 SDK에 상당히 익숙합니다.이 답변이 터무니없이 분명하다면 용서해주십시오.문제 설정 UILabel (iPhone SDK)의 가치

은 내가 .xib 파일에 연결된의 ViewController

가 나는 또한 MyCustomClass라는 사용자 정의 클래스를이 (가 FirstViewController라고합니다)가 있습니다.

:

- (void)setTheText { 
    [myLabel setText:@"foo"]; 
} 

내가

지금까지, 나는이 작업을 수행 한 FirstViewController.xib에 레이블의 텍스트를 설정하려면이 메소드를 호출 할 :이 클래스에서는,이 같은 방법을

"Object"를 Interface Builder로 드래그하여 클래스를 MyCustomClass로 설정하십시오. MyCustomClass의 IBOutlet 'myLabel'을 뷰의 UILabel에 연결했습니다. 그러나

, 내가 프로그램을 실행하고, 같은 것을 (FirstViewController.m에) 레이블을 설정하는 버튼을 누를 때 :

- (IBAction)doSomething:(id)sender { 
    MyCustomClass *customClass = [MyCustomClass alloc] init]; 
    [customClass setTheText]; 
} 

이 비록 설정하지 않습니다. NSLog(@"%@",[myLabel text]); returns (null)

Xcode는 오류나 경고를 표시하지 않습니다. 무엇이 잘못 될 수 있습니까?

감사합니다,

마이클

추가 정보 : MyCustomClass.h에

인터페이스 : 여기에서는 CustomClass의

#import <UIKit/UIKit.h> 

@interface MyCustomClass : NSObject { 
    UILabel *myLabel; 
} 

@property (nonatomic, retain) IBOutlet UILabel *myLabel; 

- (void)setTheText; 

@end 
+0

MyCustomClass에 대한 인터페이스를 게시 할 수 있습니까? myLabel을 어떻게 정의합니까? – Dana

+0

메인 포스트에 추가했습니다. – Michael

답변

2

인스턴스는 NIB는 전혀 관련이있다. + alloc을 사용하여 새 객체를 인스턴스화했습니다. NIB에서 특정 MyCustomClass를 수정하려면 FirstViewController가 가리키는 IBOutlet이 필요합니다.

+0

고마워요! 그게 내 문제를 해결했습니다! – Michael

2

UILabel에는 값을 설정하기 위해 text라는 속성이 있습니다. 더 쉽게 찾을 수 있습니다.

myObject.myLabel.text = @"Your text"; 
+0

팁 주셔서 감사. 나는 도트 구문을 알고 있지만, 'P'에 대해 '좋은 점'을 가지고 있으며, 좋은 구형 대괄호를 선호한다! – Michael

+0

Gotcha, 어쨌든 다른 언어에 익숙한 사람들에게 더 편리합니다. – Convolution

3

작업 메서드에서 사용자 지정 클래스의 새 인스턴스를 만들고 싶지 않습니다.

원하는 작업을 수행하는 데는 몇 가지 방법이 있습니다.

옵션 1은보기 컨트롤러에 사용자 지정 개체에 대한 참조를 제공합니다. 이렇게하려면, 뷰 컨트롤러의 유형 MyCustomClass *의 출구를 만들 당신이 당신의 XIB 파일에서 만든 새 객체에 그 출구를 연결 한 다음 액션 메소드에서 할당 제거하기 :

- (IBAction)doSomething:(id)sender {  
    [customClass setTheText]; 
} 

옵션 2CustomClass 레이블을 두 가지 방법으로 처리 할 수 ​​있습니다. 이렇게하기 위해 사물을 더 단순화 할 수 있습니다.당신의 CustomClassUILabel에 대한 출구를 넣고 단순히 액션으로 setTheText 방법을 변환 :

이제
- (IBAction)setTheText:(id)sender { 
    [myLabel setText:@"foo"]; 
} 

, 당신의 버튼까지 해당 작업을 연결하고 모든 매력처럼 작동합니다.

참고 : 코코아의 KVC/KVO 시스템의 일부로 속성 설정자에게 일반적으로 사용되는 "set"로 시작하지 않는 메소드 이름을 사용해야합니다. 대신, 나는 이것을 changeLabel 또는 동등 물이라고 부를 것입니다.

0

당신은 라벨을 두 가지로 불렀습니다. 먼저 비 ibaction 다음 속성에서 ibaction입니다.