Почему мое приложение для 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;
Другие вопросы по тегам