2010-08-06 6 views
0

"그림 표시"단추를 어떻게 만들 수 있으며 클릭하면 "그림 숨기기"로 바뀝니다. 나는 객관적인 C를 처음 접했고 인터페이스 빌더에서 버튼을 만드는 방법을 알고 있지만 버튼의 텍스트와 기능을 전환하는 방법을 모른다. 누군가 나를 도울 수 있습니까?iPhone에서 UIButton을 전환하십시오.

답변

1

버튼의 .tag 속성을 남용합니다. 이 기능에 조치를 터치를 아래로 훅 :

-(IBAction)buttonClick:(UIButton*)sender 
{ 
    if (sender.tag) 
    { 
     sender.tag = 0; 
     sender.text = @"Show Picture"; 
     // do actions when "hide" is clicked 
    } else { 
     sender.tag = 1; 
     sender.text = @"Hide Picture"; 
     // do actions when "show" is clicked 
    } 
} 
+0

감사합니다. 그게 뭐지?태그 속성은 어쨌든합니까? – Fasid

+2

일반적으로 다른 방법으로 사용합니다. IB에서 버튼 (또는 다른 항목)을 "태그 지정"하는 쉬운 방법이므로 하나의 핸들러 만 이벤트를 수신 할 수 있습니다. 태그에서 액션의 출처를 확인할 수 있습니다 . (당신은 여전히 ​​두 가지를 혼합 할 수 있습니다. 예를 들어, 버튼 0, 2, 4에 태그를 붙이고, 마지막 비트를'sender.tag^= 1;을 사용하여 뒤집고'sender.tag & 1'을 사용하여 테스트하지만 의도적으로 예제를 매우 간단하게 유지하여 무슨 일이 일어나는지보실 수 있습니다 .. – mvds

+0

고맙습니다 ... – Fasid

1

대신의 태그 속성을 사용하여 (AB)는, 당신은 또한 단순히 사이의 버튼을 전환 할 수있는 선택, 선택과 같이하지 :

- (IBAction)myButtonAction:(id)sender 
{ 
    [sender setSelected:![sender isSelected]]; 

    // or in Objective-C 2.0 if you're so inclined 
    sender.selected = !sender.selected; 
} 

그런 다음 IB에서 버튼의 일반 상태와 선택된 상태에 대한 텍스트를 관리자에서 직접 설정할 수 있습니다 (또는 setTitle : forState : 메소드를 통해 프로그래밍 방식으로). 이 텍스트의 여러 별도의 세트를 제작 되었기 때문에

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html

을 : 여기에 문서를 참조 -

0

이 하나 까다로운 일이있는 UIButton 제대로 "공식적인"텍스트가없는 것입니다 버튼의 현재 상태에 따라 표시됩니다. 즉, 현재 활성화되어 있는지 또는 비활성화되어 있는지, 강조 표시되어 있는지 여부 등이 포함됩니다. 따라서이 작업을 수행하기 위해 설정할 수있는 속성이 하나도 없습니다.

그래서, 당신은이처럼 버튼을 선언 할 조치 및 출구 모두 같은 :

// inside the class declaration 

BOOL pictureShown ; // initializer not required, defaults to 0 (NO) 

UIButton * sampleButton ; 

// skip irrelevant lines here 

@property (nonatomic, retain) IBOutlet UIButton * sampleButton ; 
- (IBAction) doSampleButton ; 

후크 인터페이스 빌더에서 그 최대의 모두 다음 : button.h에서

setTitle : forState : 메소드를 사용하여 텍스트를 변경하십시오 (이 경우 모든 상태를 지정 했으므로 제목은 모두 동일하게 유지됩니다). button.m에서

: 예를 들어

@synthesize sampleButton ; 

- (IBAction) doSampleButton { 
    if (pictureShown == YES) { 
     // hide the picture, and then... 

     [sampleButton setTitle: @"Show Picture" forState: (UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled)] ; 
     pictureShown = NO ; 
    } else { 
     // show the picture, and then... 

     [sampleButton setTitle: @"Hide Picture" forState: (UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled)] ; 
     pictureShown = YES ; 
    } 
} 

또한 내가 버튼을 사용하여 뷰에 대한 뷰 컨트롤러에, 인스턴스 변수, "pictureShown"를 선언 한 것을 알게 될 것이다, 추적 버튼의 현재 "모드", 그리고 버튼의 현재 모드에 따라 어떤 기능이 수행되는지를 결정하고 이에 따라 버튼 텍스트를 토글하기 위해 본질적으로 버튼의 액션 내에서 if 문을 사용하고 있습니다.

(예를 들어 버튼의 현재 제목을 직접 검사하거나 버튼에 상태를 저장하는 등의 방법보다는 버튼의 현재 모드를 추적하는 데 MVC와 마찬가지로이 방법을 사용합니다. . 상태는 컨트롤러 클래스에 속하는의) 기능이 많은 코드를 필요한 경우

이 (내가 자기에게 메시지를 사용하는 거라고 예 :

[self showPicture] ; 
[self hidePicture] ; 

doSampleButton 안에 다 밀어 넣는 것을 피하기 위해, 하지만 기술적으로 요구되는 것이 아니라 순전히 문체가 있습니다.

3

태그 속성을 남용하지 마십시오. 버튼 식별자로만 사용하는 것이 좋습니다 (예 :보기에 버튼이 거의없는 경우 태그를 0, 1, 2 ...로 설정하여 어떤 버튼이 발신자인지 식별 ​​할 수 있음). 당신은 어떤 전역 int int i 변수를 설정할 수 있고 그에 따라 값을 변경할 수 있습니다.

관련 문제