您的位置:首页 > 产品设计 > UI/UE

iOS - UITableView 单选功能实现

2016-08-26 17:12 417 查看
#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);

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: