我创建了一个带有自定义TableViewCell的UITableView,
#import <UIKit/UIKit.h>
#import "Equipment.h"
#import "MCStepperViewController.h"
@class EquipmentCell;
@protocol EquipmentCellDelegate <NSObject>
- (void)EquipmentCell:(EquipmentCell *)cell didChangeStepperValue:(int)stepperValue indexPath:(NSIndexPath*)indexPath;
@end
@interface EquipmentCell : UITableViewCell <MCStepperDelegate>
@property (nonatomic, strong) UIImageView* eqiupmentImage;
@property (nonatomic, strong) UILabel* Title;
@property (nonatomic, strong) UILabel* details;
@property (nonatomic, strong) UILabel* prices;
@property (nonatomic, strong) MCStepperViewController* stepper;
@property (nonatomic, weak) id <EquipmentCellDelegate> delegate;
@property (nonatomic, assign) NSIndexPath* indexPath;
-(void)setContent:(Equipment*)equip;
-(void)setAmount:(int)eq_amount;
@end
自定义单元格拥有一个stepperview控制器,我将stepperViewController.view添加到单元格的内容视图中。
stepperViewController有一个textField和两个按钮作为强属性。
令人困惑的是,当我滚动表格视图时,表格单元格已准备好进行重用过程。
单元格的属性视图效果很好,但是stepViewViewController(它是contentView的子视图)的视图正在变得重复。
虽然我已将cell.stepper.view.textField设置为正确的值,但它仍然不起作用。
有什么好的解决方案吗?我不认为禁用可重用性是一个很好的尝试。
非常感谢!
编辑:
cellForRowAtIndexPath方法:
else if (tableView == _subTable)
{
EquipmentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"detailTable" forIndexPath:indexPath ];
if(!cell)
{
cell = [[EquipmentCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"detailTable"];
}
cell.indexPath = indexPath;
Equipment* item = [[[_goodsList objectAtIndex:indexPath.section] objectForKey:@"data"] objectAtIndex:indexPath.row];
cell.delegate = self;
[cell setContent:item];
if (countDic) {
if ([countDic objectForKey:[NSString stringWithFormat:@"%lu", (indexPath.section*100)+(indexPath.row)]]) {
[cell setAmount:(int)[[countDic objectForKey:[NSString stringWithFormat:@"%lu", (indexPath.section*100)+(indexPath.row)]] integerValue]];
}
else
{
[cell setAmount:0];
}
}
return cell;
}
我尝试在单元类中分配textfield.text,但是不起作用。
- (void)setAmount:(int)eq_amount
{
_stepper.amount = eq_amount;
_stepper.amountText.text = [NSString stringWithFormat:@"%d", eq_amount];
if (eq_amount == self.stepper.min) {
_stepper.minusButton.hidden = YES;
_stepper.amountText.hidden = YES;
}
}
答案 0 :(得分:0)
检查将stepperViewController.view添加到单元格的内容视图的位置。
您希望支持tableview单元格的视图回收。因此,只要您的cell1不再可见并且数据2需要一个单元格(调用cellForRowAtIndexPath),此重用的单元格将是单元格1.而不是data1 cell1现在显示data2。如果在cellForRowAtIndexPath函数中添加stepperViewController.view,则会为data1添加视图。现在如果cell1不再可见并且应该用于data2,你应该检查你是否再次添加stepperViewController.view。
您可以检查单元格子视图中是否已存在stepperViewController.view,并删除或重复使用该视图,而不是简单地添加视图。