2014-02-28 87 views
0

我有這種方法,它顯示右邊的UILabels和UISwitches。我想通過按下標籤來打開和關閉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

使用UIButton而不是UILabel並在其上設置IBAction。您可以將按鈕設計爲與標籤完全相同。你IBAction方法應該是這個樣子:

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

編輯

如前所述,因爲你在代碼構建UIButton S,您需要將目標添加到按鈕獲得按鈕單擊。添加這樣的動作:

[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]; 
}