2013-12-12 2 views
0

일부 데이터 (예 : NSString)를 UIView에 첨부 할 수있는 방법이 있습니까? ([view setMetadata:@"username"]과 같은 것).보기에 메타 데이터를 첨부하는 방법은 무엇입니까?

내가 달성해야 할 것을 설명하겠습니다. 나는 프로그래밍 방식으로 사용자의 프로필을 터치하여 표시 할 UIButton을 만듭니다. 그들은 모두 접촉하는 방법을 촉발 할 것이지만, 그 방법이 호출 될 때 나는 어떤 사용자가 가야 하는지를 알아야한다. 이 문제를 해결하기 위해 키가 숫자 인 NSDictionary를 사용할 수 있으며 뷰 태그를이 숫자와 일치하도록 설정할 수 있습니다.하지만 더 좋은 방법이 있는지 궁금합니다.

+3

하위 클래스 'UIView'를 사용하고 필요한 속성을 추가 하시겠습니까? – dandan78

+0

@ dandan78 좋은 조언이기 때문에 이것을 적절한 답으로 써야합니다. 이보다 더 좋은 것이 없다면 받아 들일 것입니다. –

+0

당신이하고있는 일은 좋은 접근 방법입니다. 'UIView' 프레임 워크는 임의의 포인터를 뷰와 연관시키는 것을 지원하지 않습니다. 태그를 그대로 사용하는 것이 좋습니다. – rmaddy

답변

2

질문을 신중하게 읽었 으면 UIView 대신 UIButton의 서브 클래 싱을 권장했을 것입니다. 여하튼 원칙은 동일하지만 서브 클래 싱 한 다음 필요한 속성을 추가하고 필요한 경우 (예 : action: 메서드에서) 하위 클래스로 캐스팅하고 데이터를 검색합니다.

이미 서브 클래 싱에 대해 논의 중이므로 실제로 예제에서 setMetadata: 메서드를 추가하고 id 또는 NSDictionary 또는 그와 비슷한 것을 저장하는 데 사용할 수 있습니다.

2

보기에 태그를 추가 할 수 있습니다. 태그는 숫자에 불과하므로 문자열에 사용할 수 없습니다. 당신은 태그로 사용하는 숫자로부터 문자열 데이터 key'd를 가진 NSDictionary를 가질 수 있습니다.

+0

'UIView' 객체를 사전의 키로 사용하면이 작업을 단순화 할 수 있습니다. 이렇게하면 태그에 대해 전혀 걱정할 필요가 없습니다. – Macondo2Seattle

2

완전한 설명을 위해 한 가지 더 많은 접근법이 있습니다. 범주 및 objc_setAssociatedObject 함수를 사용하여 클래스에 속성을 추가 할 수 있습니다. 예를 들어, this tutorial을 참조하십시오.

저는 개인적으로 스티븐 존슨의 솔루션을 선호합니다.

1

제안하신 내용은 달성하고자하는 것을 달성하는 좋은 방법이지만, 한 가지만 기억하십시오. iOS에서는 대부분 MVC design pattern을 따르고 있습니다. MVC에서 뷰는 일반적으로 사용자가 제공 한 정보를 단순히 표시하는 "덤 (dumb)"객체입니다.

이 때문에 정보를보기가 보유하지 않고보기와 모델을 알고있는 컨트롤러가 보유하도록 솔루션을 다시 디자인 할 수 있습니다. 그것은 때로는 불필요한 단계처럼 보일 수도 있지만, 응용 프로그램이 커질수록 더 분명해질 분리 이유가 있습니다.

* 해당 규칙의 예외는 사용자로부터 정보를 가져 오는 입력보기이지만 컨트롤러가 정보보기를 쿼리하는 경우에도 마찬가지입니다.

관련 문제