2010-07-09 5 views
3

다음 코드가 붙어 있습니다. 내 UIButton 확장 클래스가 UIImageView를 표시하거나 숨기는 방법은 무엇입니까?사용자 정의 UIButton은 링크 된 UIImageView와 상호 작용할 수 없습니다.

내 메서드 호출 중이고 imageview는 nil이 아닙니다.

@interface UILinkedImageButton : UIButton { 
    IBOutlet UIImageView *linkImageView; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *linkImageView; 

@end 

#import "UILinkedImageButton.h" 

@interface UILinkedImageButton() 
- (void)showImage; 
- (void)hideImage; 
@end 
------------------------------------------------------------------------------------------------- 

@implementation UILinkedImageButton 


@synthesize linkImageView; 

- (void) dealloc{ 

    [linkImageView release], linkImageView = nil; 
    [super dealloc]; 
} 

- (id) initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 

    if(self){ 
     [self addTarget:self action:@selector(showImage) forControlEvents:UIControlEventTouchDown]; 
     [self addTarget:self action:@selector(hideImage) forControlEvents:UIControlEventTouchUpInside]; 
     [self addTarget:self action:@selector(hideImage) forControlEvents:UIControlEventTouchUpOutside]; 
    } 

    return self; 
} 

- (void)showImage 
{ 
    if(self.imageView){ 
     NSLog(@"UILinkImageButton - showImage - currentStatus: %@", self.imageView); 
     self.imageView.hidden = NO; 
     [self.superview layoutIfNeeded]; 
    } 
} 

- (void)hideImage 
{ 
    if(self.imageView){ 
     NSLog(@"UILinkImageButton - hideImage"); 
     self.imageView.hidden = YES; 
    } 
} 

@end 
+0

는 일반적으로 나는 그 행동이 컨트롤러가 아닌 버튼에 거주 할 것으로 예상한다. 그런 다음 인터페이스 빌더 또는보기 컨트롤러 (아마도 -loadView)에서 단추의 동작을 설정해야합니다. –

+0

함수가 호출되면 로그에서 볼 수 있습니다. 그러나 링크 된 이미지 뷰의 모든 변경 사항은 표시되지 않습니다. – rckoenes

+0

UIImageView는 뷰 계층 구조입니까? 어쩌면 IB와 링크하지 않았거나 부모보기의 하위보기가 아닐 수도 있습니다. (이 방법은 객체가 할당되지만 볼 수있는 뷰는 없습니다.) – kpower

답변

2

토마스 뮐러가 코멘트에 언급 된 바와 같이 내가 너무 행동이 컨트롤러에 있어야한다고 생각 : 여기

는 코드입니다.

그 외에도 코드에서 'imageView'객체의 숨겨진 속성을 변경하는 중 선언에서 만든 맞춤 이미지보기는 'linkImageView'입니다. 'imageView'는 UButton에 선언 된 버튼의 읽기 전용 속성이며 버튼 이미지보기 이 아니고 linkImageView을 나타내므로 코드가 오류를 발생시키지 않습니다.

희망이 도움이됩니다.

덕분에, Swapnil

+0

날씨가 적절하기 때문에 그 실수를 보지 못했습니다. 또한 이러한 방법이 컨트롤러에 있어야한다는 것에 동의합니다. 나는이 행동을 여러 번 필요로한다는 것을 제외하면 이것은 시간을 절약 해 준다. – rckoenes

관련 문제