我知道如何将一个类的方法调用到另一个类。然而这一次它不适合我,它只是让我疯了。以下是我的代码
MenuPageCell.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
MenuPAgeCell.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 Used项目,但它不适用于我。我知道应该是愚蠢的错误,但我无法弄明白。
谢谢&amp;问候
MAYUR
答案 0 :(得分: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
将MenuPageCellDelegate
添加到MenuPageViewController
的已实施协议列表中(如果它正在实施UITableViewDataSource
协议),请tableView:cellForRowAtIndexPath:
方法写cell.delegate = self;
而不是{ {1}}
答案 1 :(得分:0)
在m_parentViewController
方法中初始化您的viewDidLoad
。
如
m_parentViewController = [[yourViewControllerName alloc] init];
然后致电
[m_parentViewController addItemToCart:self.m_cellIndex];
答案 2 :(得分:0)
将一个选择器添加到单元格按钮,并将标记设置为等于索引路径。现在在选择器中,只需在sender.tag的帮助下区分不同的单元格。