IOS Custom UINavigationBar - barButtonItems接收触摸界限

时间:2013-05-22 08:58:01

标签: ios uibutton custom-controls uinavigationbar uinavigationitem

我为我的项目实现了这个自定义NavigationBar类:Video with Issue

#import "PTTNavigationBar.h"
@implementation PTTNavigationBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

}
    return self;
}


// Overriding drawRect: perform custom drawing.
// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    UIImage *navBarImage = UIIMAGE_NAMED( kNavBarBackGroundImage );
    [navBarImage drawInRect:CGRectMake(0, 0, NAVBAR_SIZE.width , NAVBAR_SIZE.height)];

    [self setBackgroundColor:[UIColor clearColor]];

}

- (CGSize)sizeThatFits:(CGSize)size {

    //[self setTitleVerticalPositionAdjustment:-12 forBarMetrics:UIBarMetricsDefault];
    CGRect frame = [UIScreen mainScreen].applicationFrame;
    CGSize newSize = CGSizeMake(frame.size.width , NAVBAR_SIZE.height);
   [self layoutSubviews];

    return newSize;
}


-(void) layoutSubviews
{
    [super layoutSubviews];

    [self setBackgroundColor:[UIColor clearColor]];

    for (UIView *view in self.subviews)
   {
       CGRect frame = view.frame;
       frame.origin.y = 6;
       view.frame = frame;
    }


}

@end

任何人都可以帮助我吗? THX

1 个答案:

答案 0 :(得分:1)

我假设你是通过代码向leftBarButton添加自定义按钮。

以下代码应限制barButtonItem

范围内的触摸
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action: @selector(handleBackButton)forControlEvents:UIControlEventTouchUpInside];

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height)];
[view addSubview:button];

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:view];
self.navigationItem.leftBarButtonItem = customBarItem;