iOS - UITableView 单选功能实现

#import <UIKit/UIKit.h>

@interface TestCell : UITableViewCell
@property(nonatomic,copy)NSString *content;
/**
 *  标记行是否被选中
 */
@property(nonatomic,assign)BOOL isChecked;
@end
#import "TestCell.h"
@interface TestCell()
@property (weak, nonatomic) IBOutlet UIImageView *mark_ImageView;
@property (weak, nonatomic) IBOutlet UILabel *firstLabel;

@end

@implementation TestCell

- (void)awakeFromNib
{
    self.mark_ImageView.hidden = YES;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

   
}
-(void)setContent:(NSString *)content
{
    if (_content!=content) {
        _firstLabel.text=content;
    }

}
/**
 *  这里只是用到了一张图所以通过来imageview的hidden来显示是否选中
 *
 *  @param isChecked
 */
- (void)setIsChecked:(BOOL)isChecked
{
    _isChecked = isChecked;
    //选中
    if (_isChecked) {
        self.mark_ImageView.hidden = NO;
        self.mark_ImageView.image = [UIImage imageNamed:@"mark_select"];
    }
    else
    {
        self.mark_ImageView.hidden = YES;
    }

}

@end




#import "ViewController.h"
#import "TestCell.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>

{
   NSIndexPath *selectIndexPath;

}

@property(nonatomic,strong)NSMutableArray *dataArray;

/**
 *  保存选中行的对应的数据
 */
@property(nonatomic,strong)NSMutableArray *markArray;



@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
  
    for (NSInteger i=0; i<20; i++) {
        [self.dataArray addObject:[NSString stringWithFormat:@"选中第%ld行",i]];
    }
    
    
    
    
    
}

- (NSMutableArray *)dataArray{

    if (!_dataArray) {
        _dataArray =[NSMutableArray array];
    }
    return _dataArray;
    
}

- (NSMutableArray *)markArray{
    
    if (!_markArray) {
        _markArray =[NSMutableArray array];
    }
    return _markArray;
    
}



-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return  self.dataArray.count;
}
static NSString *cellIdentifier = @"TestCell";
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    TestCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    cell.content= self.dataArray[indexPath.row];
    
    if (selectIndexPath==indexPath) {
        cell.isChecked = YES;
    }
    else{
        cell.isChecked = NO;
    }
    
    
    return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44.0f;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //未选中
   TestCell *noCheckedCell = (TestCell *)[tableView cellForRowAtIndexPath:selectIndexPath];
     noCheckedCell.isChecked = NO;
    selectIndexPath = indexPath;
    
    //选中
    TestCell *checkedCell = (TestCell *)[tableView cellForRowAtIndexPath:indexPath];
    checkedCell.isChecked = YES;
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    //刷新指定的行
    NSIndexPath *indexPath_Row=[NSIndexPath indexPathForRow:indexPath.row inSection:0];
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath_Row,nil] withRowAnimation:UITableViewRowAnimationNone];
   
    NSString *checkString  = self.dataArray[indexPath.row];
    if ([self.markArray containsObject:checkString]) {
         [self.markArray removeObject:checkString];
    }
    else{
        [self.markArray removeAllObjects];
        [self.markArray addObject:checkString];
    }
    
    NSLog(@"self.checkArray =%@",self.markArray);
    
    
    
}

  

posted @ 2016-08-26 17:12  曹县三胖暴打大猩猩  阅读(555)  评论(0编辑  收藏  举报