表单元格使用不同部分iOS中的按钮

时间:2013-06-12 09:17:12

标签: iphone uitableview uibutton cell reusability

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

}

请给我正确的解决方案,理由为何其发生 感谢

2 个答案:

答案 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;
}