2011-02-12 2 views
1

간단한 질문인데 죄송하지만 충분한 해결책을 찾지 못해서 조금 혼란 스럽습니다. P버튼을 눌렀을 때 (iOS) 사용자 정의 데이터를 검색 하시겠습니까?

많은 버튼이있는 앱이 있습니다. 50)을 사용하고 어떤 버튼이 눌러 졌는지에 따라 많은 항목으로 사전을 작성해야합니다.

(예를 들어, 버튼 (27)과 함께 내가의 ViewController에 DICT를 구축 할 것 누르면 : 이름 -> 존 스미스 주소 -> 1 무한 루프 시대 -> 99 )

분명히를 작성 각 버튼에 고유 한 동작이 잘못되었습니다.

내가하고 싶은 UIButton (위의 예제를 계속) 하위 클래스, 이름, 주소 및 Age를 사용자 지정 Button에 추가하고 단추가 인스턴스화 될 때이 인스턴스 변수를 각각 설정하는 것입니다. init : 그런 다음 해당 버튼을 누르면 모든 버튼에서 호출되는 단일 buildDict : (id) 보낸 사람 액션을 가질 수 있으며 보낸 사람으로 사전을 채 웁니다. 이름 ...

내 질문 : 인터페이스 빌더의 속성 관리자에 필드를 추가하여이 값을 설정할 수 있습니까? 이것이 가능하지 않은 경우 단추 인스턴스화를 어디서 찾을 수 있습니까? 그래서이 값을 프로그래밍 방식으로 설정할 수 있습니까?

답변

6

뷰에 모델에 속한 데이터를 넣고 싶지는 않습니다. 그리고 이것은 너무 복잡하게 들립니다.
인터페이스 빌더에 데이터를 삽입 하시겠습니까? 내 견해에 대한 태그를 편집 할 필요가없고 데이터를 편집하고 싶다면 운이 좋을까요?

진지하게, 올바르게 작성하십시오. NSArray를 만듭니다. 40 개의 단추에 대해 40 개의 개체. plist 편집기를 사용하여 주소 목록을 만들고 해당 plist 파일을 코드에로드하십시오. 이렇게하는 것이 가장 빠르고 깨끗한 방법입니다.

각 버튼에 태그를 지정하십시오. (어쨌든 코드에서 40 개의 버튼을 추가해야하는 경우) IBAction에 연결하십시오. 첫 번째 항목에 1000이라는 태그를 지정하는 것이 좋습니다. 태그가없는 버튼은 태그 0이있는 버튼처럼 동작하며 사용자는이를 원하지 않습니다. 그리고 버튼에서 배열 인덱스로 간다면 1을 뺄 필요가 없습니다.

- (IBAction)buttonPressed:(UIButton *)sender { 
    // remember? tag 1000 equals index 0. 
    NSUInteger index = sender.tag - 1000; 
    NSDictionary *object = [self.data objectAtIndex:index]; 
    // do whatever you want 
} 

아무 것도 하위 클래스로 만들 필요가 없습니다. Model-View-Controller 개념을 위반할 필요가 없습니다.

+0

동의합니다.이 코드는 훨씬 깔끔하고 MVC를 위반하는 것으로 생각됩니다. "각 단추에 태그를 지정하십시오." 이것은 이미 UIButton에 연결되어 있습니까? 서브 클래스에 이것을 추가해야합니까? "plist 파일을 코드에로드하십시오." plist 파일을 사용한 적이 없습니다. 나는이 이름, 주소 등을 보유하고 있다고 가정하고 있습니까? 이 코드를 어떻게로드 할 수 있습니까? 마지막으로 두 대답을 모두 가정합니다. 인터페이스 작성기를 사용하는 대신 코드에서이 단추를 다양한보기에 어떻게 추가 할 수 있습니까? 도움이 감사합니다. – eriknelson

+0

저는 올바른 (읽기 : 가장 고통스럽지 않은) 방법을 배우고 자합니다. – eriknelson

+0

태그는 이미 UIButton에있는 속성이므로 myButton.tag = 1처럼 호출하면됩니다. 내 대답은 plist를 아주 쉽게 배열에로드 할 수있는 방법을 보여줍니다. xcode에서 plist 파일을 만들고 편집 할 수 있으며, 사용하기가 쉽고 즉시 사용할 수 있습니다. – Zebs

1

당신은 아마 배열 및 태그를 사용하여 더 나은하지만 당신이 정말로 여기에 서브 클래스하려는 경우 당신이 그것을 할 수있는 방법입니다 :

인터페이스 빌더는 당신이 추가 속성을 추가 할 수 없습니다.

사용자 지정 하위 클래스 (실제 코드로 작성)를 사용해야합니다. 엑스 코드에

선택 :

파일 -> 새 파일 -> 목표 C 클래스 (UIView의 서브 클래스).

MyCustomButton과 같은 이름을 사용하십시오.

:UIView:UIButton으로 바꿔야합니다 (이 방법은 UIButton에서 하위 분류이며 UIView에서 하위 분류로 지정해야 함).

인터페이스 선언에서 새 속성을 설정할 수 있습니다. 나중에 속성에 액세스 할 수 있도록 속성을 선언해야합니다.

@interface MyButton : UIButton { 
    NSString* name; 
    NSString* address; 
    NSNumber* age; 
} 

@property(nonatomic,retain)NSString* name; 
@property(nonatomic,retain)NSString* address; 
@property(nonatomic,retain)NSNumber* age; 

@end 

@synthesize 당신의 재산에 기억

당신은 다음과 같습니다 뭔가 결국 줘야 해.

- (id)initWith:(NSString*)aName and:(NSString*)aStreet and:(NSNumber*)anAge{ 
    self = [super init]; 
    self.name = aName; 
    self.address= aStreet; 
    self.age=anAge; 

    return sef; 
} 

행운을 빕니다 : 당신이 당신 자신의 초기화 방법을 쓰기 init을

사용자 정의를 수행합니다!

관련 문제