2011-02-23 2 views
3

기본적으로보기에 여러 개의 단추가 있어야합니다. 나는 그들에게 모두 한 가지 기능을 부탁하여 '국가'를 추적 할 수 있기를 바랍니다.여러 UIButtons 함수

기능을 호출하는 버튼을 어떻게 알 수 있습니까? 어쨌든 발신자의 텍스트를 가져올 수 있습니까?

답변

5

, 다음 서명 중 하나를 가질 수 있습니다 ("Target-Action in UIKit"참조)

- (void)action 
- (void)action:(id)sender 
- (void)action:(id)sender forEvent:(UIEvent *)event 

보낸 사람을 수락하는 메서드 서명을 사용하면 해당 작업을 트리거 한 개체에 액세스 할 수 있습니다. 그런 다음 제목과 태그를 포함하여 호출 객체의 속성에 액세스 할 수 있습니다. 보낸 사람과 이미 가지고있는 포인터를 비교하여이 특정 이벤트의 보낸 사람을 결정할 수 있습니다.

if (sender == self.nextPageButton)은 이해하기 쉽고 if (sender.tag == 4) 또는 if ([((UIButton *)sender).currentTitle isEqualToString:@"foo"])보다 깨지기 쉽기 때문에 포인터 비교를 선호합니다. IB의 태그를 보면 코드가 의미하는 바, 중요하거나 중요하지 않은 내용을 알 수 없습니다. UI를 업데이트하거나 앱을 현지화 할 때 제목이 변경되며 변경 사항은 코드를 변경하지 않아도됩니다.

+0

+1 받아 들인 것보다 훨씬 철저한 대답. –

3

버튼의 tag 속성을 설정하십시오.

인터페이스 작성기에서이를 수행 할 수 있습니다 (필드를 살펴보십시오). 코드에서 다음

:

if (sender.tag == 0) { 
} else if (sender.tag == 1) 

등 IBAction를 방법을 포함하여 아이폰 OS 동작 방법에

+0

아. 좋은 친구. 감사! – Critter

1

태그를 명시 적으로 설정할 필요가 없습니다. 당신은

@property (nonatomic , retain) IBOutlet UIButton *myButton; 

뿐만 아니라 당신의 .H 파일을 자신의 재산에있는 UIButton의 IBOutlets를 정의하고

같은 방법을 구현할 수하는 .m 파일에

-(IBAction) browse : (id) sender; 

같은 방법 수

-(IBAction) browse : (id) sender{ 

    if((UIButton *)sender == myButton){/*add the action here*/} 
} 

원하는 많은 버튼에 대해 메소드에 if 문을 추가하십시오. 모든 개별 버튼의 IBOutlet과 선택기 찾아보기를 연결하십시오.

메모리 누수를 방지하기 위해 dealloc 메소드에서 IBOutlet을 해제하도록 기억하십시오.

희망이 도움이됩니다!