2016-01-23 3 views
1

Вот моя проблема, у меня есть пользовательские ячейки в этом 1 ярлыке и 4 кнопки, как вопрос и ответ, когда пользователь нажимает на кнопку 1 остающегося 3 кнопки идут так, enter image description hereКак сохранить нажатую кнопку indexpath в пользовательской ячейке?

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

ViewDidLoad() 
{ 
testArray = [[NSMutableArray alloc]init]; 
for (int i =0; i<[mainArray count]; i++) 
{ 
    [testArray addObject:@"Unchecked"]; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *cellId = @"Cell"; 
ContestQATableViewCell *cell =(ContestQATableViewCell *)[tableViewQA dequeueReusableCellWithIdentifier:cellId]; 
if (cell==nil) 
{ 
    NSArray *myNib; 
    myNib =[[NSBundle mainBundle]loadNibNamed:@"ContestQATableViewCell" owner:self options:nil]; 
    cell = (ContestQATableViewCell *)[myNib lastObject]; 
} 
cell.textLabel.text = [mainArray objectAtIndex:indexPath.row]; 
if([[testArray objectAtIndex:indexPath.row] isEqualToString:@"Unchecked"]) 
[cell.answer1 setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
else 
[cell.answer1 setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
cell.answer1.tag = indexPath.row; 
[cell.answer1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

[cell.contentView addSubview:cell.answer1]; 

return cell; 

[cell.answer1 addTarget:self action:@selector(buttonsClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.answer2 addTarget:self action:@selector(buttonsClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.answer3 addTarget:self action:@selector(buttonsClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.answer4 addTarget:self action:@selector(buttonsClicked:) forControlEvents:UIControlEventTouchUpInside]; 
return cell; 
} 

и вот мой дополнительный целевой метод

-(void)buttonsClicked:(id)sender 
{ 
UIButton *btn=(UIButton *)sender; 
ContestQATableViewCell * cell=(ContestQATableViewCell *)  [btn.superview superview]; 
if (cell.answer1.tag==btn.tag) 
{ 
    [cell.answer1 setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
}else{ 

    [cell.answer1 setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
} 
if (cell.answer2.tag==btn.tag) 
{ 
    [cell.answer2 setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
}else{ 

    [cell.answer2 setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
} 
if (cell.answer3.tag==btn.tag) 
{ 
    [cell.answer3 setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
}else{ 

    [cell.answer3 setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
} 
if (cell.answer4.tag==btn.tag) 
{ 
    [cell.answer4 setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
}else{ 

    [cell.answer4 setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
} 
} 

ответ

2

Для Выселение Uncheck функциональность только buttonClicked: метод не достаточно. Вы также поместите это условие в cellForRowAtIndexPath: метод, для которого кнопка выбрана или которая в не выбрана, потому что метод cellForRowAtIndexPath: будет вызывать каждый раз, когда вы прокрутите UITableView, и ячейки будут обновляться.

, например

я объяснить шаг за шагом

Шаг-1

Создать два массива один за gloabally другой для проверки цели

@interface ViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> 
{ 

    NSMutableArray *arrayforCheckUnchek; // handle which button is selected or which is unselected 
    NSMutableArray *originalArray; // original Array 
} 

Шаг-2

выделение памяти для массивов

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    arrayforCheckUnchek = [[NSMutableArray alloc]init]; 

    originalArray = [[NSMutableArray alloc]initWithObjects:@"cell1",@"cell2",@"cell3",@"cell4",@"cell5", nil]; 

    // setting all cell initilayy at un check 
    for(int i=0; i<[originalArray count]; i++) 
    { 
     [arrayforCheckUnchek addObject:@"Unchecked"]; 
    } 

    } 

Шаг-2

установки ваши методы DataSource

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [originalArray count]; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *Identifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier]; 
    if(cell == nil) 
    { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    cell.textLabel.text = [originalArray objectAtIndex:indexPath.row]; 

    UIButton *radiobutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [radiobutton setFrame:CGRectMake(270.0, 7.0, 30.0, 30.0)]; // customize the frames 

    if([[arrayforCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"Unchecked"]) 
    [radiobutton setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
    else 
    [radiobutton setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
    radiobutton.tag = indexPath.row; 
    [radiobutton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

    [cell.contentView addSubview:radiobutton]; 

    return cell; 
} 

Шаг-3

здесь выбран индекс кнопки вы можете изменить изображение

-(void)buttonClicked:(UIButton *)sender 
{ 
    //Getting the indexPath of cell of clicked button 

    CGPoint touchPoint = [sender convertPoint:CGPointZero toView:yourtableviewname]; 
    NSIndexPath *indexPath = [yourtableviewname indexPathForRowAtPoint:touchPoint]; 

    //Checking the condition button is checked or unchecked. 

    if([[arrayforCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"Unchecked"]) 
    { 
     [sender setImage:[UIImage imageNamed:@"RadioChecked"] forState:UIControlStateNormal]; 
     [arrayforCheckUnchek replaceObjectAtIndex:indexPath.row withObject:@"Checked"]; 
    } 
    else 
    { 
     [sender setImage:[UIImage imageNamed:@"RadioUnChecked"] forState:UIControlStateNormal]; 
     [arrayforCheckUnchek replaceObjectAtIndex:indexPath.row withObject:@"Unchecked"]; 
    } 
    } 
+0

если прокрутить выбранный появится же, настроить себя на основе, как ваша потребность –

+0

но он не работает для меня! –

+0

Можете ли вы уточнить свой вопрос ... –

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