-1

(id) 보낸 사람을 다음 코드에 어떻게 추가합니까?발신자를 다음에 추가하는 방법 - (IBAction)?

- (IBAction) gobutton: (UIButton *) button5 { 

내가 시도한 모든 것이 도움이 될 것입니다. 감사.

편집 : 나는 유지하는 데 필요한 (있는 UIButton *) 당신이하려고하지만, 대부분의 작업이 어떤 모습인지 분명하지 않다

+0

왜 부정 투표입니까? :-( – 0SX

답변

5

하는 경우 내가 올바르게 기억, 당신은

- (IBAction) gobutton: (id) sender { 
if(sender == button5) 
    //do something... 
else 
    //do something else... 
} 

당신이있는 Button1에서에 대한 응답에서 실행을 나타 내기 위해 매개 변수로 Button1에서 지정된 가정하면, 나는 당신이 생각하는 방식이를 사용하는 경우 눌렀다.

2

제 (IBAction를)에서 버튼 5 참조 :

- (IBAction) gobutton: (id)sender; 
+0

- (IBAction) – 0SX

+0

액션은 대개 발신자의 ID를 전달하여 호출되므로 버튼 5가 gobutton 작업에 연결되어 있으면 발신자를 쿼리 할 수 ​​있으므로 (UIButton *) button5와 (id) id 송신자는 귀하의 button5입니다 ... – stefanB

+0

발신자 버튼입니다 –

-3

UIButton과 보낸 사람을 모두 포함하는 간단한 구조를 만들고 사용할 수 있습니까?

구조체 myObject { UIButton * button5; id 보낸 사람. }

... 또는, 당신이 당신의 자신의 NSObject의 (아마 더 코코아-y)를 만들 수 있습니다

@instance의 인 myObject : NSObject의 { ... }

+0

아니요 대상/행동에 매우 구체적인 패턴이 있으며 송신자는 하나의 인수 인 – bbum

1

첫 번째 매개 변수를 조치 은 항상입니다 (사용자는 적절하게 유형과 이름을 지정할 수 있음).

메소드가 버튼에 대한 조치 인 경우 첫 번째 매개 변수가 버튼이됩니다. 이 메소드가 여러 버튼에 대한 액션 인 경우 첫 번째 매개 변수를 사용하면 탭이있는 버튼 (Leper가 설명하는대로)을 결정할 수 있습니다.

실제로 어떤 문제를 해결하려고합니까?
정보를 작업 방법에 전달하는 기술이 있습니다. 예를 들어, 테이블 뷰 셀에 나타나는 버튼이 있고 모든 셀에 대해 동일한 액션을 수행하는 경우 액션 메소드에서 어떤 셀의 버튼을 탭했는지 확인할 수 있어야합니다.

+0

입니다. ; \t \t [(ID) 보낸 사람 (goGOAppDelegate *) [[UIApplication sharedApplication] 위임] \t \t goFlip :] 제가하는 데 문제는 내가 다음 코드를 사용하는 것을 시도하고 있다는 것입니다그러나 '보낸 사람'이 분명히 선언되지 않았다는 오류가 발생하는 유일한 문제는 - (IBAction)을 (UIButton *) button5의 필요성으로 인해 보낸 사람으로 만들 수 없다는 것입니다. IBAction : gorev2 = (button5.tag == BUTTON7) – 0SX

+0

메서드를 직접 호출하는 경우 IBAction 일 필요는 없으며 매개 변수가 필요하지 않습니다. 다시 말하지만, 당신이하려고하는 것에 대한 더 높은 수준의 정보를 제공해야 할 것입니다 - 당신이 전형적인 접근 방식을 취하는 것처럼 보이지 않습니다. – gerry3

+0

@unknown : button5는 무엇입니까? 이'-gobutton :'메소드를 누가 호출할까요? – kennytm

3

처음에는 .... IBAction은 Interface Builder를 제외하고는 특별한 것을 의미하지 않습니다. 기본적으로 :

#define IBAction void 

언제든지 IBAction이 표시 될 때마다 "무효"라고 생각하십시오. 인터페이스 빌더에게 메소드가 제어 작업을 연결하는 유효한 메소드임을 알리는 유일한 플래그가 있습니다. Objective-C 컴파일러는 그것에 대해 알 필요가 없으므로 모든 "조치"메소드가 void를 리턴하므로 void로 정의됩니다.

두 번째로, action 메소드에는 하나의 인수가 있으며이 인수는 여러 유형의 객체 일 수 있습니다. 이 때문에 작업 메서드는 해당 형식의 형식으로 id 형식을 사용해야합니다. 그런 식으로 컴파일러가 형식 검사 오류를 생성하지 않고 Objective-C 개체에 대한 포인터를 전달할 수 있습니다.일부 기능이 무엇인가에 대한 포인터를 취할 필요가 때 id 거의 일상적으로 C에서 사용되는 void * 같은 유형이 지정되지 않은 포인터처럼, 즉

- (IBAction)myAction:(id)sender { 
    if (sender == self.someButton) { 
     UIButton *button = (UIButton *)sender; 
     ... 
     return; 
    } else if (sender == self.someControl) { 
     UIControl *control = (UIControl *)sender; 
     ... 
     return; 
    } 
} 

:

그래서 대개의 행동은 다음과 같이 작동합니다 알 수없는 유형의 sender은 다른 유형의 컨트롤이 될 수 있으므로 id과 같은 일반적인 것을 사용하면 발신자는 코드가 무엇인지 알게되면 더 구체적인 것으로 전송됩니다.

어쨌든 인터페이스 빌더에서 해당 메소드를 대상 작업으로 사용하지 않을 경우 무언가를 리턴 유형 IBAction으로 정의 할 필요가 없습니다. 앱 대리인에 IBAction이있는 것이 이상한 것 같습니다.

0

사용자가 컨트롤에 닿기 전에 발신자 ID를 가져 오는 방법은 무엇입니까?

발견! 태그를 설정하고 viewWithTag를 사용하십시오.

관련 문제