UItableView 用 UIButton 替换复选标记 [英] UItableView Replacing Checkmarks with UIButton
问题描述
我只想使用 UIButton
代替复选标记我成功添加按钮并使其在选择行时作为复选标记工作但只有行选择是工作按钮不明智我不想让它工作按钮以及单元格选择截图:
I just want to use UIButton
instead check marks im successful in adding button and making it working as check mark when row selected but only row selection is working button not wise not i want to make it work button as well as cell selection screenshot:
http://i.imgur.com/aXiBsfU.png
http://i.imgur.com/hQddEGk.png
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row==0)
{
if (selectAll==0)
{
selectAll=1;
[self.arrForIndPaths removeAllObjects];
}
else
{
selectAll=0;
[self.arrForIndPaths removeAllObjects];
}
}
else
{
if (selectAll!=1)
{
if([self.arrForIndPaths containsObject:indexPath])
{
[self.arrForIndPaths removeObject:indexPath];
}
else
{
[self.arrForIndPaths addObject:indexPath];
}
}
else
{
selectAll=0;
if([self.arrForIndPaths containsObject:indexPath])
{
[self.arrForIndPaths removeObject:indexPath];
}
else
{[self.arrForIndPaths addObject:indexPath];}}}[tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static const NSInteger btnTag = 1;
static NSString *MyIdentifier = @"SearchResult";
UITableViewCell *cell;
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
}
UILabel *lblText = [[UILabel alloc]initWithFrame:CGRectMake(40, 0, 400, 55)];
UIButton *btnCheck = [[UIButton alloc]initWithFrame:CGRectMake(845, 10, 35, 28)];
btnCheck.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom;
btnCheck.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[btnCheck setImage:[UIImage imageNamed:@"checkbox_white.png"] forState:UIControlStateNormal];
[btnCheck setImage:[UIImage imageNamed:@"checked_white.png"] forState:UIControlStateSelected];
[btnCheck setImage:[UIImage imageNamed:@"checked_white.png"] forState:UIControlStateHighlighted];
[btnCheck addTarget:self action:@selector(doneBtn:) forControlEvents:UIControlEventTouchUpInside];
btnCheck.tag = btnTag;
[cell.contentView addSubview:lblText];
[cell addSubview:btnCheck];
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
if (indexPath.row==0)
{
lblText.textColor =[self colorWithHexString:@"333333"];
lblText.font=[UIFont fontWithName:@"VERDANA" size:30];
}
else
{
lblText.textColor=[self colorWithHexString:@"333333"];
lblText.font=[UIFont fontWithName:@"VERDANA" size:20];
}
}
else
{
if (indexPath.row==0)
{
lblText.textColor=[self colorWithHexString:@"333333"];
lblText.font=[UIFont fontWithName:@"VERDANA" size:18];
}
else
{
lblText.textColor=[self colorWithHexString:@"333333"];
lblText.font=[UIFont fontWithName:@"VERDANA" size:16];
}
}
lblText.text=[arrFacilities objectAtIndex:indexPath.row];
lblText.textAlignment=NSTextAlignmentLeft;
if (selectAll==1)
{
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
[btnCheck setImage:[UIImage imageNamed:@"checked_white.png"] forState:UIControlStateNormal];
}
else
{
if([self.arrForIndPaths containsObject:indexPath])
{
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
[btnCheck setImage:[UIImage imageNamed:@"checked_white.png"] forState:UIControlStateNormal];
}
else
{
[cell setAccessoryType:UITableViewCellAccessoryNone];
[btnCheck setImage:[UIImage imageNamed:@"checkbox_white.png"]forState:UIControlStateNormal];
}
}
cell.textLabel.numberOfLines=0;
cell.textLabel.lineBreakMode=NSLineBreakByWordWrapping;
return cell;
}
- (void)doneBtn:(UIButton*)sender
{
UIButton *btn = (UIButton*)sender;
}
提前致谢.
推荐答案
全局声明这些变量
BOOL isSelectedAll;
NSMutableArray *arraySelectedRows;
int allDataCount; // this may be your arrayWithData.count
在viewDidLoad"中
in 'viewDidLoad'
isSelectedAll = NO;
allDataCount = 10;
arraySelectedRows = [[NSMutableArray alloc]init];
在'cellForRowAtIndexPath'中
in 'cellForRowAtIndexPath'
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ce" forIndexPath:indexPath];
CustomTableViewCell *cell = [[CustomTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cee"];
cell.textLabel.text = @"Test";
UIButton *buttonSelection = [[UIButton alloc]initWithFrame:CGRectMake(tableView.frame.size.width - 100, 8, 50, 50)];
buttonSelection.tag = indexPath.row;
if(isSelectedAll)
{
[buttonSelection setImage:[UIImage imageNamed:@"tick"] forState:UIControlStateNormal];//Rename imageName as yours
}
else if([arraySelectedRows containsObject:indexPath]&&indexPath.row!=0)
{
[buttonSelection setImage:[UIImage imageNamed:@"tick"] forState:UIControlStateNormal];//Rename imageName as yours
}
else
{
[buttonSelection setImage:[UIImage imageNamed:@"untick"] forState:UIControlStateNormal];//Rename imageName as yours
}
[buttonSelection addTarget:self action:@selector(selectionButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:buttonSelection];
return cell;
}
在didSelectRowAtIndexPath"中
in 'didSelectRowAtIndexPath'
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
if (indexPath.row == 0)
{
//select all button
if (isSelectedAll)
{
isSelectedAll = NO;
[arraySelectedRows removeAllObjects];
}
else
{
[arraySelectedRows removeAllObjects];
for (int i = 1; i<allDataCount; i++)
{
[arraySelectedRows addObject:[NSIndexPath indexPathForRow:i inSection:0]];//section number may be defer for you
}
isSelectedAll = YES;
}
}
else
{
if([arraySelectedRows containsObject:indexPath])
{
[arraySelectedRows removeObject:indexPath];
}
else
{
[arraySelectedRows addObject:indexPath];
}
if ((allDataCount - 1) == arraySelectedRows.count)
{
isSelectedAll = YES;
}
else
{
isSelectedAll = NO;
}
}
[self.tableView reloadData];
}
如果你需要在按钮动作中做同样的事情
if you need to do the same thing in button action
-(void)selectionButtonAction:(UIButton*)button
{
if (button.tag == 0)
{
//select all button
if (isSelectedAll)
{
isSelectedAll = NO;
[arraySelectedRows removeAllObjects];
}
else
{
[arraySelectedRows removeAllObjects];
for (int i = 1; i<allDataCount; i++)
{
[arraySelectedRows addObject:[NSIndexPath indexPathForRow:i inSection:0]];//section number may be defer for you
}
isSelectedAll = YES;
}
}
else
{
NSIndexPath *buttonIndexPath = [NSIndexPath indexPathForRow:button.tag inSection:0];//section number may be defer for you
if([arraySelectedRows containsObject:buttonIndexPath])
{
[arraySelectedRows removeObject:buttonIndexPath];
}
else
{
[arraySelectedRows addObject:buttonIndexPath];
}
if ((allDataCount - 1) == arraySelectedRows.count)
{
isSelectedAll = YES;
}
else
{
isSelectedAll = NO;
}
}
[self.tableView reloadData];
}
'arraySelectedRows' 包含选定行的 indexPath
The 'arraySelectedRows' contain selected row's indexPath
这篇关于UItableView 用 UIButton 替换复选标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!