2013-01-31 3 views
4

프로그래밍 방식으로 버튼을 만들고, 다시 탭핑하지 않으면 강조 표시된 상태로 유지됩니다. 지금 내가하고있는 일은 단추를 만든 다음 IBAction을 추가하는 것입니다. 그러나 문제는 메서드에서 내 단추를 만든 다음 내 IBAction에서 단추를 참조하는 방법을 모르겠습니다. 여기 내 코드 :IBAction 및 버튼 프로그래밍 방식으로

UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [testButn setFrame:CGRectMake(0, 135, 40, 38)]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"] forState:UIControlStateHighlighted]; 
[testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside]; 
[self.contentview addSubview:testButn 

-(IBAction)staypressed:(id)sender{ 

//Not sure what to do here, since this method doesn't recognize testButn, How do I reference testButn 
+0

있는 UIButton theButton * = (있는 UIButton *) 송신기; theButton.selected = true; .selected는 버튼을 비활성화 할 수 있으므로 스타일을 변경했을 수 있습니다. – BooRanger

+0

여전히 작동하지 않습니다. 이것은 내가 지금 가지고있는 것입니다 : - (IBAction) stayPressed : (id) sender {UIButton * testButn = (UIButton *) sender; [testButn setHighlighted : YES]; } –

답변

9

발신자는 testButn입니다. stayPressed의 인수 유형을 (id)에서 (UIButton *)으로 변경해야합니다.

조치 방법이 여러 다른 클래스의 클래스에 연결되어 있지 않으면 사용중인 모든 객체 클래스로 id를 바꾸는 것이 가장 좋습니다. 이것은 IB에서 물건을 연결하는 경우에 유용 할 수 있습니다. 왜냐하면 잘못된 종류의 물건에 연결시키지 않기 때문입니다.

버튼이 인식되지 않아 작동하지 않는다는 사실이 아닙니다. 귀하의 접근 방식은 잘못되었습니다. 나는 당신이 터치 다운하기 위해 연결된 행동을 가질 필요가 있다고 생각하고, 아마도 선택된 상태를 YES로 설정할 것입니다. 버튼 정의에서 선택한 상태에 대해 imageForState :를 설정해야합니다. 당신이 지금하고있는 방법, 그 방법은 만질 때까지 호출되지 않습니다. 이런

예시 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [testButn setFrame:CGRectMake(0, 135, 40, 38)]; 
    [testButn setImage:[UIImage imageNamed:@"New_PICT0019.jpg"] forState:UIControlStateNormal]; 
    [testButn setImage:[UIImage imageNamed:@"New_PICT0002.jpg"] forState:UIControlStateSelected]; 
    [testButn addTarget:self action:@selector(stayPressed:) forControlEvents:UIControlEventTouchDown]; 
    [self.view addSubview:testButn]; 
} 

-(void)stayPressed:(UIButton *) sender { 
    if (sender.selected == YES) { 
     sender.selected = NO; 
    }else{ 
     sender.selected = YES; 
    } 
} 
+0

흠, 이것은 내가 가지고있는 순간이며 버튼은 여전히 ​​강조 표시되지 않습니다. (IBAction) stayPressed : (UIButton *) 보낸 사람 {UIButton * testButn = (UIButton *) 보낸 사람; [testButn setHighlighted : YES]; } –

+0

@DavidWest, 제 편집 참조 – rdelmar

+0

원본 코드가 보이면 UIControlStateHighlighted 이미지가 있습니다. 내 행동이 touchupinside와 관련이 있습니다. 버튼을 탭하면 강조 표시되지만 강조 표시되지 않습니다. –

2

송신자를 UIButton에 캐스트해야합니다.

- (IBAction)staypressed:(id)sender 
{ 
    UIButton *theButton = (UIButton*)sender; 

    //do something to theButton 
} 
+0

아직도 작동하지 않습니다. 이것은 내가 지금 가지고있는 것입니다 : - (IBAction) stayPressed : (id) 보낸 사람 { UIButton * testButn = (UIButton *) sender; [testButn setHighlighted : YES]; } –

+0

괜찮 았지만 작동하지 않는 것은 무엇입니까? 함수가 전혀 실행되지 않습니까? 또는 오류가 있습니까? – Fogmeister

2
UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [testButn setFrame:CGRectMake(0, 135, 40, 38)]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"] forState:UIControlStateHighlighted]; 
    [testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside]; 
    testButn.tag = 1; 
    [self.contentview addSubview:testButn 

-(IBAction)staypressed:(id)sender 
{ 
    if ([sender tag]==1) 
    { 
     somecodes... 
    } 
} 
관련 문제