Почему мое приложение для iPhone не может вызвать метод делегата
Я разрабатываю приложение для iPhone. Я специально определил заголовок для панели навигации. Представление заголовка содержит кнопку, я также определил метод делегата для поддержки события нажатия кнопки. Но когда кнопка нажата, делегат не может быть выполнен. Я не уверен почему? Ниже приведены мои коды: UPDelegate.h
@protocol UPDelegate <NSObject>
@optional
-(void)buttonClick;
@end
TitleView.h
#import <UIKit/UIKit.h>
#import "UPDelegate.h"
@interface TitleView :UIView
@property (nonatomic, unsafe_unretained) id<UPDelegate> delegate;
-(id)initWithCustomTitleView;
@end
TitleView.m
@synthesize delegate;
-(id)initWithCustomTitleView
{
self = [super init];
if (self) {
UIButton *titleButton = [UIButton buttonWithType:UIBUttonTypeCustom];
titleButton.frame = CGRectMake(0, 0, 20, 44);
[titleButton setTitle:@"ABC" forState:UIControlStateNormal];
// add action
[titleButton addTarget:delegate action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:titleButton];
}
return self;
}
В моем ViewController я реализую протокол, как показано ниже:
MyViewController.h
@interface MyViewController : UIViewController<UPDelegate>
и в файле.m я написал метод делегата, но не может быть exeucte. MyViewController.m
-(void)buttonClick{
NSLog("click title button");
}
3 ответа
Вы должны установить свой delegate
, из вашего примера кода вы создаете id<UPDelegate> delegate;
в вашем titleView
учебный класс.
Так в вашем MyViewController
где вы добавили <UPDelegate>
создать экземпляр TitleView
и установите делегата на себя.
Так в вашем MyViewController
использовать:
TitleView*titleView=[[TitleView alloc]init];
titleView.delegate=self;
Похоже, вы не установили значение свойства делегата вашего titleView, поэтому любые сообщения, отправляемые в свойство делегата, игнорируются, поскольку делегат равен нулю.
Вы должны убедиться, что вы устанавливаете делегат вашего titleView как ваш MyViewController. Лучшее место для этого, скорее всего, в вашем MyViewController viewDidLoad:
метод.
Вы устанавливали делегата где-нибудь? Потому что вы должны установить делегат вашего TitleView в MyViewController:
titleView.delegate = self;