2016-01-23 34 views
1

这里是我的问题,我有在1个标签自定义单元格和4个按钮一样的问题和答案,当剩余3个按钮的按键1的用户点击再这样下去, enter image description here如何保存自定义单元格中点击的按钮的索引路径?

当用户滚动单元格它不保存用户选择的按钮,我的意思是说用户点击它没有保存的按钮。 这里是我的代码,

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

做检查,取消选中的功能仅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

设置你的数据源的方法是记忆

-(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

你可以更新你的问题... –

相关问题