1

我创建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;

}

请给我适当的解决方案,说明为什么会发生谢谢

4

2 回答 2

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;

最后在您的自定义类中添加按钮单击处理程序。

于 2013-06-12T11:12:21.730 回答
-1

从您的问题中不清楚您要问什么。如果我没记错的话,你有 4 个部分,每个部分都有一些行(单元格),每行都有选中和取消选中按钮。您正在标记按钮,以便您可以获取该按钮的索引以执行某些操作。

cellForRowAtIndexPath现在,每次向上或向下滚动表格视图时,都会调用记住。因此,每次滚动表格视图时,“i”都会增加。

因此,如果您有 10 行,并且您认为每行都设置了 i = 0 到 9。但是当你每次滚动时,“i”都会增加。因此,您可能无法在代码中进一步使用标记值。

更好的是使用indexPath.rowtableview。这对于每一行都是唯一的。

现在修改你的代码,

- (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;
}
于 2013-06-12T09:56:02.103 回答