マップビューを管理するコントローラのヘッダファイルにプロトコルを宣言しました。プロパティ値を設定しようとしましたが、それはゼロです。
@protocol UCMapViewDelegate <NSObject>
@required
- (void)pushMapviewRight;
@end
Iは、別のビューコントローラ(.H)におけるプロトコルの実装を宣言し、私はその点プロパティにデリゲートを設定してい
// in the UCRootViewController.h
@interface UCRootViewController : UIViewController <UCMapviewDelegate>
// in the UCRootViewController.m
- (void)pushMapviewRight
{
NSLog(@"push mapview right");
}
.mファイルに実装していrootviewControllerに渡します。これは、私のMapviewControllerのviewDidLoad()で行われ、プロパティーは@property (weak, nonatomic) id<UCMapViewDelegate> delegate;
です。
// in UCRootViewController
self.mapviewController.rootviewController = self;
// in UCMapViewController
self.delegate = (id<UCMapviewDelegate>)self.rootviewController;
委任されたメソッドを呼び出す。 showMenu()は、mapviewControllerのボタンが押されて動作したときに実行されます。デリゲートメソッドは呼び出されません。
- (void)showMenu
{
NSLog(@"show menu");
[self.delegate pushMapviewRight];
}
何も起こりません。何が間違っていますか?ヘルプは大歓迎です!
代わりにその狂気の鋳造のすべての.Hにデリゲートに準拠するためにあなたの意図を宣言することで、それは多くの厄介なことを保存します。 appDelegateにデリゲートを設定しないでください(これはそれが目的ではありません)、関連するデリゲートクラス(あなたの場合はUCRootViewController内)に設定してください。 – CodaFi
appDelegateに設定されていません。私はmapviewController UCRootViewControllerである)viewDidLoadに – MJB
デリゲートを配置する場所に 'self.rootviewController'の値を記録するとどうなりますか? –