0

あるクラスのメソッドを別のクラスに呼び出す方法を知っています。しかし、今回はうまくいきませんでした。以下は私のコードです

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使用プロジェクトでは正常に機能しますが、私にとっては機能しません。ばかげた間違いであることはわかっていますが、理解できません。

ありがとうございます。それでは、お元気で

マユール

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

MenuPageCellDelegate実装されたプロトコルのリストにMenuPageViewControllerand (プロトコルを実装している場合UITableViewDataSource) をtableView:cellForRowAtIndexPath:メソッド writecell.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

テーブルビューの cellforrow メソッドで、セル ボタンにセレクターを追加し、タグをインデックスパスに設定します。セレクターでは、sender.tag を使用して異なるセルを区別するだけです。

于 2013-09-27T10:46:04.027 に答える