自定义UITableViewCell中的UIViewController

时间:2015-11-18 08:05:37

标签: ios objective-c iphone uitableview uiviewcontroller

我知道这是微不足道的,但我已经搞砸了,花了好几个小时。

我有一个UIViewController,它由CategoryTableview和ProductsTableView组成。

ProductsTableView正在创建名为ProductTableViewCell的自定义TableViewCell。

ProductTableViewCell具有标题标签,详细信息标签,价格标签和自定义步进器,用于控制从UIViewController继承子类的产品数量。

步进器由两个按钮和一个文本域组成。

我认为我实施该计划的方式比它应该更复杂。

我的问题是如何检测父视图控制器中步进控制器更改的值。

代码是:

ProductionViewController.h (parent view controller for listing everything)

@interface ProductionViewController ()<UITableViewDataSource, UITableViewDelegate>
@property (nonatomic,strong) UITableView* categoryTable;
@property (nonatomic,strong) UITableView* productsTable;

@property (nonatomic,strong) CheckOutBar* checkOutBar;

//datasources
@property (nonatomic,strong) NSMutableArray* menuLists;
@property (nonatomic,strong) NSMutableArray* detailLists;

//datefield
@property (nonatomic,strong) NSString* startDate;
@property (nonatomic,strong) NSString* endDate;

产品的定制单元格

@interface ProductCell : UITableViewCell

@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;

细胞的实施方法是

     @implementation ProductCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    {
        _Title = [[UILabel alloc] init];
        _eqiupmentImage = [[UIImageView alloc] init];
        _details = [[UILabel alloc] init];
        _details.font = kFONT(12);
        _details.textColor = KColor_Gray;

        _prices  = [[UILabel alloc] init];
        _stepper = [[MCStepperViewController alloc] init];
        [self.contentView addSubview:_stepper.view];
        [self.contentView addSubview:_Title];
        [self.contentView addSubview:_eqiupmentImage];
        [self.contentView addSubview:_details];
        [self.contentView addSubview:_prices];
    } 
        return self;
    }

-(void)layoutSubviews
{
    [super layoutSubviews];
    [_eqiupmentImage setFrame:CGRectMake(kLeftMargin, kLeftMargin, 80 ,80)];
    [_Title setFrame:CGRectMake(10+CGRectGetMaxX(_eqiupmentImage.frame), kLeftMargin/2, 60, 20)];
    [_details setFrame:CGRectOffset(_Title.frame, 0, 20)];
    [_prices setFrame:CGRectMake(10+CGRectGetMaxX(_eqiupmentImage.frame), CGRectGetMaxY(_eqiupmentImage.frame)-20, 40, 20)];
    [_stepper.view setFrame:CGRectOffset(_prices.frame, 40, 0)];
}

自定义的stepperview是

MCStepperViewController.h  (for controlling the amount of products)
@interface MCStepperViewController : UIViewController

@property (nonatomic, strong) UITextField  *amountText;
@property (nonatomic, strong) UIButton * plusButton;
@property (nonatomic, strong) UIButton * minusButton;

@property (nonatomic, assign) int max;
@property (nonatomic, assign) int min;

@property (nonatomic, assign) int amount;

谢谢

1 个答案:

答案 0 :(得分:0)

一种方法是使用类似- (void)productCell:(ProductCell *)cell didChangeStepperValue:(NSInteger)stepperValue的方法在您的单元格中实现协议。然后,您将视图控制器作为每个单元格的委托,并在每次步进器更改其值时调用此方法。要将单元格彼此分开,您可以将tag值分配给模型的相应索引。

另一种方法是使用KVO,但是你应该小心订阅/取消订阅。当然,使用块是一种可行的选择。