UILabel 텍스트가 너무 길면 윤곽선으로 하위 뷰 UILabel ivar에 애니메이션을 적용하는 UIView 하위 클래스 (나는 MarqueeLabel
이라고 부름)를 만들고 있습니다. 포함하는보기. 인스턴스 변수의 setter/getters를 클래스에 넘김
MarqueeLabel
클래스
의 메소드를 작성하지 않고도 깨끗한 구현을 기대했다. 메시지 포워딩을 통해 이것을 수행하는 방법을 발견했습니다. 인식 할 수없는 모든 메소드를 MarqueeLabel
으로 보내면 UILabel ivar로 전달됩니다. 필자의 경우, MarqueeLabel
으로 인식 할 수없는 메소드가 UILabel에서 일반적으로 사용되는 메소드입니다. 그 접근 방식에 몇 가지 문제가 있지만이 있습니다
1. 당신은, 오히려 marqueeLabel.text
2 컴파일러는 위의 줄에 경고를주는 것보다, [marqueeLabel setText:@"Label here"]
를 사용해야 할 이유는
'MarqueeLabel'이 (가) '-setText :'에 응답하지 않을 수 있습니다.
다른 사람을 괴롭히는 것입니다.
이러한 문제를 피하려면 메소드를 ivar 메소드로 가져 와서 ivar 오브젝트에서 계속 작동하면서 클래스를 사용하여 액세스 할 수있는 방법이 있습니까?
감사합니다.
참고 : 내가 설정 한 방법으로도이 작업을 수행 할 수있는 최선의 방법이 아닐 수 있습니다. 아마도 UILabel을 서브 클래 싱하거나 클래스를 계속 사용하는 것이 더 좋았지 만, 애니메이션 + 클리핑 (텍스트 스크롤이 UIView를 포함하지 않고 사라지는 경우)이 이러한 메서드를 사용하여 수행 될 수있는 방법을 파악할 수 없었습니다.
주 2 : 나는 subLabel
은 서브 뷰 UILabel의 어디에 있는지 marqueeLabel.subLabel.text
을 사용할 수 있습니다 알고 있습니다. 그리고 이것은 제가 취하는 방향일지도 모릅니다. 그러나 더 나은 해결책이 있는지도 알 수 있습니다!
정확히 내가 생각했던대로 작동합니다. 감사합니다. 나는'@ dynamic'을 어떻게 든 사용해야한다고 생각하고 있었지만 forUndefinedKey 메소드를 보지 않았고 forwardInvocation 만 보았습니다. 나는 아마 당신이 결국 [[theLabel setValue : value forKey : key];를 의미한다고 생각한다. – Chuck
네, 있습니다. 나는 그것을 고쳐 줄 것이다. – ughoavgfhw
나는 이와 비슷한 것을하려고하는데, getters와 setters (이 경우'marqueeLabel.text')를 사용하는 것은 undefinedKey 메소드에서 끝나지 않습니다. 내가 잘못된 것을하고 있거나 단순히 잘못된 장소를보고 있습니까? –