0

UIButtonとでcustomCellを作成しました UILabel

ここにコード:

ItemViewController.h:

@interface ItemViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
    NSArray *arr;
    IBOutlet ItemCustomCell *itemCell;
}

@property(nonatomic,retain)IBOutlet UITableView *tblItem;

ItemViewController.m

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"SimpleTableItem";

        ItemCustomCell *cell = (ItemCustomCell *) [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil) {
            [[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil];
            cell = itemCell;
        }

        cell.btnPlus.tag=indexPath.row;
        [cell.btnPlus addTarget:self action:@selector(incrementValue:) forControlEvents:UIControlEventTouchUpInside];

        return cell;
    }

    -(void)incrementValue:(UIButton *)btnAdd
    {
        NSLog(@"btn%d",btnAdd.tag);
        NSIndexPath *indexPath=[NSIndexPath indexPathForRow:btnAdd.tag inSection:0];
        ItemCustomCell *cell = (ItemCustomCell*)[tblItem cellForRowAtIndexPath:indexPath];
        cell.lblCount.text=[NSString stringWithFormat:@"%d",[cell.lblCount.text intValue]+1];

    }

ItemCustomCell.h

@interface ItemCustomCell : UITableViewCell
{


}

@property(nonatomic,strong)IBOutlet UIButton *btnPlus;
@property(nonatomic,assign)IBOutlet UILabel *lblCount;

ラベルのデフォルト値は 1 です。ボタンをクリックすると、次の値が表示されます。

上下にスクロールすると、tableView ラベルの値が 1 にリセットされます。ここで間違っていることは何ですか?

4

7 に答える 7

3

customCell の場合、再利用識別子とそのクラス名を Xib で指定し、再利用のためにセルにロードする必要があります。

    cell = [[[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil] lastObject];

編集

IBOutlet とデリゲートを使用して CustomCell 内にアクションを実装してから、タグを使用することをお勧めします。

//ItemCustomCell.h
@class ItemCustomCell;
@protolcol ItemCustomCellDelegate
  -(void) clickPlusButtonInsideCell:(ItemCustomCell *)cell;
@end
@interface ItemCustomCell
@property(weak, nonatomic) id<ItemCustomCellDelegate> delegate;
//Hookup with your view in Xib
@property (weak, nonatomic) IBOutlet UILabel *label;
-(IBACtion)clickPlusBut:(id)sender;
@end
//ItemCustomCell.m
-(IBACtion)clickPlusBut:(id)sender{
 [self.delegate clickPlusButtonInsideCell:self];
}

使用する

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    ItemCustomCell *cell = (ItemCustomCell *) [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil] lastObject];
    }
    cell.delegate = self;

    return cell;
}

-(void) clickPlusButtonInsideCell:(ItemCustomCell *)cell{
   cell.label.text = @"something";
}
于 2013-08-14T09:39:42.197 に答える
2

問題は、ボタンに関連付けられた関数からラベルの値を設定していることです。

ビューをスクロールすると、セルが消えて再表示され、コントローラーがセルを再構築します。

したがって、ラベルの値を保存しないと、セルが画面から消えるたびにラベルが失われます。

各ラベルの値を保存するために何か (配列など) を追加します。表示される値をインクリメントすると同時に、保存された値を増やします。

于 2013-08-14T09:46:49.253 に答える
0

たとえば、整数の配列にデータを個別に保存する必要があります。セルを表示すると、配列から値が取得されます。

現在、値はラベルに保存されていますが、更新するとそのデータが失われ、デフォルト値の 1 にリセットされます。

したがって、cellForTableRow で、ラベル テキストを配列の値に設定します。2 番目の方法では、配列に格納されている値を増やしてから、データをリロードします (または、今のように手動でラベルを変更します)。

于 2013-08-14T09:47:05.147 に答える
0

nib から UITableViewCell を使用している間は、次のアプローチに従う必要があります。

if (cell == nil) {
     NSArray *topLevelArray =  [[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil];

        cell = [topLevelArray objectAtIndex:0];
    }
于 2013-08-14T09:55:48.997 に答える