2011-07-26 1 views
0

Мне нужна помощь в выяснении, какой переключатель типа аксессуаров был изменен.Неисправность в том, что какой переключатель был изменен (UISwitch как дополнительный тип)

У меня есть список игр в UITableView. Я добавил UISwitch в качестве аксессуара, и каждый коммутатор реагирует на касание, меняя его состояние и уведомляя его приемник действий.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 


UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"cell"]; 
if(nil == cell){ 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cell"]autorelease]; 

} 


Games *games=[appDelegate.hidden objectAtIndex:indexPath.row]; 
cell.textLabel.text = games.gameName; 

//the switch is defined here, as is its target-action 

testSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0.0, 0.0, 74.0, 27.0)]; 
[testSwitch addTarget:self action:@selector(button_Clicked:) 
    forControlEvents:UIControlEventValueChanged]; 

//If I used the tags 
    testSwitch.tag=indexPath.row; 

[testSwitch setOn:YES]; 
cell.accessoryView=testSwitch; 


[games release]; 

return cell; 
} 

И-мишени действия: см комментарии

- (void)button_Clicked:(id)sender{ 
    UISwitch* switchControl = sender; //if I make this an int, the switches 
       //have different numbers. If it's cast as a string, it's gobbledegook. 

//This always returns 0. I can't tell it it's not getting anything (ie it's 
       // nil), or if the row always comes up 0. 

    UITableViewCell *cell = (UITableViewCell *)[sender superview]; 
    NSIndexPath *x=[table indexPathForCell:cell]; 
    NSLog(@"%i",x.row); 


} 

я вижу две потенциальные проблемы. Во-первых, мне нужно сделать переключатель для каждой строки, уникально названной. Во-вторых, я не получаю ячейку правильно.

Если кто-нибудь может увидеть мою ошибку (-а), любая помощь приветствуется.

Я просмотрел все, что я могу найти в stackoverflow, и несколько страниц в 5 или 6 разных поисковых запросов в Google, два приведенных выше примера в методе целевого действия - это лучшее, что я нашел.

ответ

3

Попробуйте

установить тег как testSwitch.tag = indexpath.row в вашем cellForRowAtIndexPath

затем в вашей кнопки щелкнули события

UISwitch *tswitch = (UISwitch *)sender; 

int row = tswitch.tag; 

NSlog(@"Your selected array value :%@",[your array objectatindex:row]); 
+0

Спасибо, это ответ. Я пропустил строку «UISwitch * tswitch = (UISwitch *) отправитель»; поэтому каждый раз, когда я пытался получить доступ к тегу с помощью testSwitch.tag, я получил последнюю инициализацию testSwitch, а не переключатель, активирующий триггер. – Jesse

+0

Lol это не позволило мне, пока я не подождал ни минуты. Готово! – Jesse

+0

@Jesse: :) ​​.... – Karthikeyan

 Смежные вопросы

  • Нет связанных вопросов^_^