2012-02-09 2 views
0

나는 처음에 UIButton의 배경 이미지를 설정 한 다음 나중에 다른 것으로 변경해야하는 응용 프로그램이 있습니다. 원래 버튼을 제거하고 새 이미지에 새 버튼을 할당 할 수 있다는 것을 알았지 만, 이미 할당 한 객체를보다 효율적으로 재사용하는 것을 선호합니다. 이것을 할 수 있습니까? 나는 currentBackgroundImage 속성은 읽기 전용입니다 것으로 나타났습니다, 그래서 같은 물건을하려고하면UIButton 배경 이미지를 재설정 할 수 있습니까?

 [thumbnailButton setBackgroundImage:nil forState:UIControlStateNormal]; 
     [thumbnailButton setBackgroundImage:[UIImage imageWithCGImage:[[photos objectAtIndex: currentPhotoIndex] thumbnail]] forState:UIControlStateNormal]; 

하거나 :

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView setBackgroundImage:forState:]: unrecognized selector sent to instance 0x16c570' 

그것을 달성 할 수 있는가 :

 [thumbnailButton setBackgroundImage:[UIImage imageWithCGImage:[[photos objectAtIndex: currentPhotoIndex] thumbnail]] forState:UIControlStateNormal]; 

나는 다음을 얻을 UIButton을 사용하거나 그냥 원래 단추를 ​​삭제하고 새 단추를 만들어야합니까?

+0

setBackgroundImage : forState :가 작동하지 않는다고 말하고 있습니까? – picciano

+0

@picciano - 예, 오류 메시지로 업데이트했습니다. –

+0

편집 내용은 무엇이며 원래 질문은 무엇입니까 – Garoal

답변

4

여기에 메모리 관리 문제가 있습니다. 때문에 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유는

*는 : '- [UITableViewCellContentView 는 setBackgroundImage : forState는 :] : 인식 할 수없는 선택기 예를 0x16c570로 전송은'

이 있음을 의미하여 thumbnailButtonUIButton을 가리키는 것이 아니라 UITableViewCellContentView을 가리 킵니다. 이것은 부적절한 할당이나 UIButton이 할당 해제 된 경우에 발생할 수 있습니다 (이 경우에는 매달린 포인터가 있습니다). 분석기를 실행하고 버튼 사용을 다시 확인하십시오.

UIButton buttonWithType은 자동으로 릴리즈 된 인스턴스를 반환하므로이를 유지해야합니다.

2

UIButton class reference에는 setBackground:forState:이라는 방법을 사용할 수 있음을 읽을 수 있습니다.

+0

그게 정확히 내가하고있는 일이며 작동하지 않습니다. –

1

정상적으로 작동합니다. 단추가 사용자 지정 단추 여야한다고 생각합니다.

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
관련 문제