1

iPhoneアプリを開発しています。ナビゲーション バーの titleview をカスタム定義しました。タイトル ビューにはボタンが含まれており、ボタン クリック イベントをサポートするデリゲート メソッドも定義しています。しかし、ボタンをクリックすると、デリゲートを実行できません。なぜだかよくわかりません。以下私のコードとして: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ファイルにdelegateメソッドを書きましたが実行できません。MyViewController.m

-(void)buttonClick{
    NSLog("click title button");
}
4

3 に答える 3

2

クラスで作成してdelegateいるコードサンプルから、を設定する必要があります。id<UPDelegate> delegate;titleView

したがって、MyViewController追加した場所で<UPDelegate>、のインスタンスを作成し、TitleViewデリゲートを自己に設定します。

だからあなたのMyViewController使用では:

 TitleView*titleView=[[TitleView alloc]init];
 titleView.delegate=self;
于 2012-08-23T05:47:57.213 に答える
1

titleView のデリゲート プロパティの値を設定していないようです。デリゲートが nil であるため、デリゲート プロパティに送信されたメッセージは無視されます。

titleView のデリゲートを MyViewController に設定していることを確認する必要があります。これを行うのに最適な場所は、おそらく MyViewController のviewDidLoad:メソッドです。

于 2012-08-23T05:44:16.717 に答える
0

デリゲートをどこかに設定しましたか? TitleView のデリゲートを MyViewController に設定する必要があるためです。

titleView.delegate = self;
于 2012-08-23T05:46:29.367 に答える