我將我的導航欄分類,使標題視圖可點擊。點擊後,它會顯示另一個視圖控制器。我正在導航欄中創建一個協議,它會告訴導航控制器標題視圖已被點擊。這裏是我的導航欄是如何定義的:代理髮送錯誤類
NavigationBar.h:
@protocol NavigationBarDelegate;
@interface NavigationBar : UINavigationBar
{
id <NavigationBarDelegate> delegate;
BOOL _titleClicked;
}
@property (nonatomic, assign) id <NavigationBarDelegate> delegate;
@end
@protocol NavigationBarDelegate
@optional
- (void)titleButtonClicked:(BOOL)titleClicked;
@end
委託實現了一個可選的方法。該.m
文件如下:
NavigationBar.m:
@implementation NavigationBar
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_titleClicked = 0;
}
return self;
}
- (void)drawRect:(CGRect)rect
{
self.tintColor = [UIColor colorWithRed:(111/255.f) green:(158/255.f) blue:(54/255.f) alpha:(255/255.f)];
UIImage *image = [UIImage imageNamed:@"titlelogo.png"];
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
titleButton.backgroundColor = [UIColor colorWithPatternImage:image];
[titleButton addTarget:self action:@selector(titleButton:) forControlEvents:UIControlEventTouchUpInside];
// self.navigationController.delegate = self;
[self.topItem setTitleView:titleButton];
[super drawRect:rect];
}
- (void)titleButton:(UIButton *)sender
{
_titleClicked = !_titleClicked;
[self.delegate titleButtonClicked:_titleClicked];
}
這將創建一個標誌一個導航欄和標題按鈕被點擊時調用titleButton
方法。一切都很好,直到這裏和導航欄很好地顯示。
在我RootViewController
:
NavigationBar *navigationBar = [[NavigationBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.view.frame.size.width, 44.0f)];
navigationBar.delegate = self;
[self.navigationController setValue:navigationBar forKey:@"navigationBar"];
的titleButtonClicked
的實現也存在。但是,當我點擊標題視圖時,出現以下錯誤:-[UINavigationController titleButtonClicked:]: unrecognized selector sent to instance
爲什麼我會收到titleButtonClicked
發送到UINavigationController
?我的導航控制器中需要做些什麼嗎?我只是使用普通的舊版本UINavigationController
。我是否也需要繼承它?如果是這樣,爲什麼?
編輯:
在NavigationBar.m
線[self.delegate titleViewClicked:_titleClicked];
調用po self.delegate
得到下面的結果。代表如何改變其類型?我該如何解決這個問題?
(lldb) po self.delegate
(objc_object *) $1 = 0x07550170 <UINavigationController: 0x7550170>
的嘗試委託財產重命名爲任何其他。似乎[自我。navigationController setValue:navigationBar forKey:@「navigationBar」];將酒吧委託人重新分配給navController – NeverBe 2012-08-02 10:36:36
我做過了 - 不起作用。 – darksky 2012-08-02 10:40:05