如何在ios中的UITableView上实现复选框功能

时间:2016-07-09 04:28:00

标签: ios uitableview checkbox

在我的ios应用程序中,我在- (void)viewDidLoad { [super viewDidLoad]; checkBoxesArray = [[NSMutableArray alloc]init]; for(int i = 0; i <15; i++){ [checkBoxesArray addObject:@""]; } } //TableList Delegate Methods: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return checkBoxesArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"HistoryCell"; UITableViewCell *cell = (UITableViewCell *)[MaintableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } model1 = mainArray[indexPath.row]; cell.textLabel.text = model1.Name; cell.detailTextLabel.text = model1.MasterId; bool variable = checkBoxesArray[indexPath.row]; newBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [newBtn setFrame:CGRectMake(250,5,30,30)]; [newBtn addTarget:self action:@selector(urSelector:) forControlEvents:UIControlEventTouchUpInside]; UIImage *btnImage; if(variable == YES){ NSLog(@"1"); btnImage = [UIImage imageNamed:@"check.png"]; }else{ NSLog(@"2"); btnImage = [UIImage imageNamed:@"uncheck.png"]; } [newBtn setImage:btnImage forState:UIControlStateNormal]; [cell addSubview:newBtn]; return cell; } -(void)urSelector :(UIButton*)sender{ CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:MaintableView]; NSIndexPath *indexPath1 = [MaintableView indexPathForRowAtPoint:buttonPosition]; NSInteger variable = indexPath1.row; bool variablePosition = checkBoxesArray[variable]; if (variablePosition == YES){ variablePosition= NO; [checkBoxesArray replaceObjectAtIndex:variable withObject:[NSString stringWithFormat:@"%d",variablePosition]]; } else{ variablePosition = YES; [checkBoxesArray replaceObjectAtIndex:variable withObject:[NSString stringWithFormat:@"%d",variablePosition]]; } [MaintableView reloadData]; } @end 中添加了一个按钮,用于检查和取消检查TableViewCell产品。为此我写了下面的代码,但根据我的代码默认情况下都检查了所有内容,当我滚动复选框时取消选中

我的代码:

SEL originalSelector = @selector(originalMethod);
SEL swizzledSelector = @selector(newMethod);

2 个答案:

答案 0 :(得分:1)

1)在模型数组中添加一个key。与isSelected类似,并将其值设置为NO

2)现在当您选择任何单元格时,将该键的值设置为YES

3)在cellForRow中,访问我们添加的密钥并检查其值。如果是,则设置检查图像否则取消选中图像。

4)不要维护两个数组,因此请删除checkboxarray。这会给你造成困惑。

答案 1 :(得分:0)

首先请替换cellForRowAtIndexPath中的代码行

bool variable = checkBoxesArray[indexPath.row];

bool variable = [checkBoxesArray[indexPath.row] length] > 0;

因为在checkBoxesArray中,有NSString类型的对象。并将它们存储到bool变量中。它总是为您的'变量'返回一个真值。首先,你需要有一个适当的条件来'检查'和'取消选中'的东西。我假设你想要第一次取消选中所有的盒子。所以我把空字符串用于取消选中按钮和一些值字符串用于检查按钮。 您需要在urSelctor方法

中替换您的代码
bool variablePosition = checkBoxesArray[variable];

if (variablePosition == YES){

    variablePosition= NO;
    [checkBoxesArray replaceObjectAtIndex:variable withObject:[NSString stringWithFormat:@"%d",variablePosition]];
}

bool variablePosition = [checkBoxesArray[variable] length] > 0;

if (variablePosition == YES){

    variablePosition= NO;
    [checkBoxesArray replaceObjectAtIndex:variable withObject:@""];
}
希望这些事能对你有帮助。

快乐编码...... :) :) :))