我创建了UITableView
,其中4个部分包含动态行数,我自定义了单元格,并将按钮添加到了非常单元格,按钮在不同的部分重复使用。
我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
self.buttonMe = [UIButton buttonWithType:UIButtonTypeCustom];
[ self.buttonMe setFrame:CGRectMake(260.0, 7.0, 30.0, 30.0)];
self.buttonMe.tag=i;
if([[arrayCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"Uncheck"])
[ self.buttonMe setImage:[UIImage imageNamed:@"check.gif"] forState:UIControlStateNormal];
else
[ self.buttonMe setImage:[UIImage imageNamed:@"uncheck.jpg"] forState:UIControlStateNormal];
[ self.buttonMe addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview: self.buttonMe];
cell.textLabel.text=@"itsFine";
//"i", i created for assigning the unique tag for created button every time
i++;
return cell;
}
请给我正确的解决方案,理由为何其发生 感谢
答案 0 :(得分:0)
警告:未经测试的,未编译的代码只是为了给你一个想法。
好的,我将尝试概述创建自定义uitableview单元格的方法
@interface MyCustomCell : UITableViewCell
@property (nonatomic, strong) UIButton * buttonMe
@end
实施将具有以下内容
@implementation MyCustomCell
@synthesize buttonMe;
- (UIButton *) buttonMe {
if(!buttonMe){
buttonMe = [UIButton buttonWithType:UIButtonTypeCustom];
[buttonMe setFrame:CGRectMake(260.0, 7.0, 30.0, 30.0)];
}
return buttonMe;
}
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier {
if (( self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] )) {
[self addSubView:self.buttonMe];
}
}
@end
接下来,您可以按如下方式修改代码:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil){
cell = [[UITableViewCell alloc] initWithReuseIdentifier:CellIdentifier];
}
[cell.buttonMe setFrame:CGRectMake(260.0, 7.0, 30.0, 30.0)];
cell.buttonMe.tag=i;
if([[arrayCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"Uncheck"]){
[cell.buttonMe setImage:[UIImage imageNamed:@"check.gif"] forState:UIControlStateNormal];
}
else{
[cell.buttonMe setImage:[UIImage imageNamed:@"uncheck.jpg"] forState:UIControlStateNormal];
}
cell.textLabel.text=@"itsFine";
i++;
return cell;
最后在自定义类中添加按钮单击处理程序。
答案 1 :(得分:-1)
从您的问题中不清楚您要问的是什么。如果我没有误会你有4节&他们每个人都有一些行(单元格)内部和每行都有检查&取消选中按钮。您正在标记按钮,以便您可以获取该按钮的索引以执行某些操作。
现在,每当您向上或向下滚动桌面视图时,都会调用cellForRowAtIndexPath
。因此,每次滚动tableview时,“i”都会增加。
所以,如果你有10行&你知道你已经为每一行设置了i = 0到9。但是当你每次滚动“i”时会增加。因此,您可能无法在代码中进一步使用标记值。
更好的是使用tableview的indexPath.row
。这对于每一行都是独一无二的。
现在修改你的代码,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
/*Reusing you button*/
[myButton setFrame:CGRectMake(260.0, 7.0, 30.0, 30.0)];
[myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:myButton];
cell.textLabel.text = @"itsFine";
}
myButton.tag = indexPath.row; // Should not use i at here
if([[arrayCheckUnchek objectAtIndex:indexPath.row] isEqualToString:@"Uncheck"])
[myButton setImage:[UIImage imageNamed:@"check.gif"] forState:UIControlStateNormal];
else
[myButton setImage:[UIImage imageNamed:@"uncheck.jpg"] forState:UIControlStateNormal];
return cell;
}