不调用Delegate方法

时间:2014-03-10 09:22:00

标签: ios objective-c

问题是没有调用委托方法。 我有这个代码。

GridView.h

#import "EditViewController.h"

@protocol GridViewDelegate<NSObject>
- (void)didSelectCell:(UIView *)cell index:(NSUInteger)index;
@end

@interface GridView : UIView<EditViewDelegate>

@property (nonatomic, assign) id<GridViewDelegate> delegate;

@end

GridView.m

@synthesize delegate;

- (void)handleTap:(UIGestureRecognizer *)gestureRecognizer
{
    NSLog(@"handleTap!");
    if ([self.delegate respondsToSelector:@selector(didSelectCell:index:)])
    {
        [self.delegate didSelectCell:gestureRecognizer.view index:0];
    }
}

MainViewController.h

#import "EditViewController.h"
#import "GridView.h"

@interface MainViewController : UIViewController<GridViewDelegate>

MainViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:gridView];

    GridView *gridView = [[GridView alloc]init];
    gridView.delegate = self;
}

- (void)didSelectCell:(UIView *)cell index:(NSUInteger)index
{
    NSLog(@"Success!");
}

当这个应用程序构建时, 调用handleTap方法,但不调用self.delegate didSelectCell

在GridView.m中描述didSelectCell方法时,NSLog正确输出Success!

如何修复它以调用委托方法?

1 个答案:

答案 0 :(得分:4)

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:gridView];

    GridView *gridView = [[GridView alloc]init];
    gridView.delegate = self;
}

将网格视图添加到视图后,您将创建一个新的网格视图  因此,您有两个网格视图:一个添加到视图中,一个具有委托。

摆脱

GridView *gridView = [[GridView alloc]init];