2014-02-28 4 views
0

이 방법은 UILwabels와 UISwitch를 바로 옆에 표시하는 방법입니다. UISwitch가 레이블을 눌러서 켜고 끌 수 있기를 바랍니다. 나는 스위치를 태그했지만 다음에 무엇을 해야할지 모르겠다. 어떤 도움을 많이 주시면 감사하겠습니다. 감사!UILabel을 눌러 UISwitch를 켜거나 끕니다.

while (i < numberOfAnswers) { 
    UILabel *answerLabel = [[UILabel alloc] initWithFrame:CGRectMake(65, y+spaceBetweenAnswers, 240, 30)]; 
    answerLabel.text = [NSString stringWithFormat:@"%@ (%@)", questionBank[randomQuestionNumber][1][i][0],questionBank[randomQuestionNumber][1][i][1]]; 
    answerLabel.font = [UIFont systemFontOfSize:15]; 
    answerLabel.textColor = [UIColor darkGrayColor]; 
    answerLabel.numberOfLines=0; 
    [answerLabel sizeToFit]; 
    [_answerView addSubview:answerLabel]; 
    answerHeight = answerLabel.frame.size.height + spaceBetweenAnswers; 

    UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, y+spaceBetweenAnswers-5, 0, 30)]; 
    mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75); 
    if ([questionBank[randomQuestionNumber][1][i][1] isEqual:@"0"]) { 
     [mySwitch addTarget:self action:@selector(wrongAnswer:) forControlEvents:UIControlEventValueChanged]; 
    } else { 
    } 
    mySwitch.tag = i; 
    [_answerView addSubview:mySwitch]; 
} 
+0

먼저 라벨 용 제스처 인식기를 추가하십시오 (http://stackoverflow.com/questions/6324724/is-there-a-touch-method-for-uilabel). 둘째, 다음과 같이 _anserview에서보기를 반복합니다. http://stackoverflow.com/questions/4779048/looping-through-subviews-or-a-view. 마지막으로 스위치 태그를 비교하고 스위치를 켜고 끕니다. 이게 효과가 있는지 알려주세요. – Radu

+2

왜 레이블 대신에'UIButton'을 사용하지 않으시겠습니까? 그것이 그들이 만들어진 이유입니다! IBAction 메소드를 추가하고 내부에 스위치 상태를 변경하는 코드를 넣을 수 있습니다. – Mischa

+0

나는 왜 이것을 필요로하는지 모르지만, 여기에 해결 방법이있다. 단지 UIButton을 UILable 밑에 놓고 그 버튼에 액션을 추가하면된다. – zaheer

답변

1

UILabel 대신 UIButton을 사용하고 IBAction을 설정하십시오. 레이블과 똑같이 보이도록 단추 스타일을 지정할 수 있습니다. 귀하의 IBAction 방법은 다음과 비슷한 모습이 될 것입니다

- (void)buttonPressed:(UIButton *)sender 
{ 
    //Get the view by tag 
    UISwitch *mySwitch = (UISwitch *)[self.view viewWithTag:yourTag]; 
    [mySwitch.setOn:![mySwitch isOn]]; 
} 

편집 언급 한 바와 같이

, 당신은 코드에서 UIButton의를 구축하고 있기 때문에, 당신은 버튼을 얻을 수있는 버튼에 대상을 추가 할 필요가 딸깍 하는 소리. 다음과 같이 조치를 추가하십시오.

[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
+0

그 소리가 좋은 생각 같아! 내 스위치에는 모두 태그가 달려 있습니다. IBAction에서 태그가있는 UISwitch를 전환하려면 어떻게해야합니까? –

+0

왜 OP가 'IBAction'을 사용합니까? 질문에있는 코드를보십시오. IB가 사용되지 않습니다. – rmaddy

+0

@DomasfromUK 업데이트 된 코드 – coder

0

각 제스처 인식기를 각 라벨에 추가하십시오. 탭하면 제스처 (view)에서 레이블을 가져올 수 있습니다. 이제 스위치를 업데이트해야합니다.

레이블에 1000 + i 인 태그를 추가하면 간단한 빼기를 사용하면 찾을 필요가있는 전환 태그를 얻을 수 있습니다.

레이블에 태그를 추가하고 태그를 배열 또는 스위치의 색인으로 사용할 수 있습니다 (가능하면 IBOutletCollection).

+1

라벨이 작동하려면 사용자 상호 작용을 활성화해야합니다. – rmaddy

0

다음과 같은 조치를 취할 수 있습니다.

UISwitch* mySwitch = [[UISwitch alloc]init]; 
[self addSubview:mySwitch]; 

UIButton* switchLabelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
switchLabelBtn.frame = CGRectMake(0, 0, 80, 40); 
[switchLabelBtn addTarget:self action:@selector(switchLabelbtnTapped:) forControlEvents:UIControlEventTouchUpInside]; 
[switchLabelBtn.layer setValue:mySwitch forKey:@"Switch"]; 
[self addSubview:switchLabelBtn]; 


- (void)switchLabelbtnTapped:(UIButton*)sender 
{ 
    UISwitch* mySwitch = [sender.layer valueForKey:@"Switch"]; 
    mySwitch.on = ![mySwitch isOn]; 
}