0

我知道如何将一个类的方法调用到另一个类。然而,这一次它对我不起作用,它只是让我发疯。下面是我的代码

菜单页单元格.h

#import <UIKit/UIKit.h>
@class MenuPageViewController;
@interface MenuPageCell : UITableViewCell{
 NSInteger   m_cellIndex;
    MenuPageViewController   *m_parentViewController;
}
@property(nonatomic, assign) NSInteger      m_cellIndex;
@property(nonatomic, strong) MenuPageViewController   *m_parentViewController;
-(IBAction) addToCart;

@end

菜单页单元格.m

#import "MenuPageCell.h"
#import "MenuPageViewController.h"
@implementation MenuPageCell

@synthesize m_cellIndex;
@synthesize m_parentViewController;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}
-(IBAction) addToCart
{
    NSLog(@"Add To cart = %d",self.m_cellIndex);

    [m_parentViewController addItemToCart:self.m_cellIndex];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

MenuPageViewController.m

-(void) addItemToCart:(NSInteger)aIndexItem
{
   NSLog(@"In Add to Cart method");
}

现在,此代码适用于非 ARC 使用的项目,但它不适用于我。我知道这应该是愚蠢的错误,但我无法弄清楚。

感谢和问候

马尤尔

4

3 回答 3

3

从单元中引用 ViewController 是一个设计缺陷,请考虑改用委托。但是,如果您真的需要 ViewController 属性,请weak不要使用它,strong因为目前您最终会遇到保留周期。

@protocol MenuPageCellDelegate<NSObject>
- (void)addItemToCart:(NSInteger)aIndexItem;
@end

@interface MenuPageCell : UITableViewCell {
    NSInteger m_cellIndex;
}

@property(nonatomic, assign) NSInteger m_cellIndex;
@property(nonatomic, weak) id<MenuPageCellDelegate> delegate;

-(IBAction) addToCart;

@end

@implementation MenuPageCell
...
-(IBAction) addToCart
{
    NSLog(@"Add To cart = %d",self.m_cellIndex);

    if ([self.delegate responsToSelector:@selector(addItemToCart:)]) {
        [self.delegate addItemToCart:self.m_cellIndex];
    }
}
...
@end

在方法write而不是MenuPageCellDelegate_MenuPageViewControllerUITableViewDataSourcetableView:cellForRowAtIndexPath:cell.delegate = self;cell.m_parentViewController = self;

于 2013-09-27T10:10:17.563 回答
0

初始化你的m_parentViewControllerinviewDidLoad方法。

像这样

m_parentViewController = [[yourViewControllerName alloc] init];

然后打电话

[m_parentViewController addItemToCart:self.m_cellIndex];
于 2013-09-27T09:26:04.750 回答
0

在 tableview 的 cellforrow 方法中,将选择器添加到单元格按钮,并将标签设置为等于 indexpath。现在在选择器中,只需借助 sender.tag 区分不同的单元格。

于 2013-09-27T10:46:04.027 回答