在导航控制器中使自定义后退按钮可点击区域变小

时间:2013-05-14 22:24:35

标签: iphone ios uinavigationcontroller uinavigationbar uinavigationitem

我已经使用下面的代码创建了一个自定义后退按钮,但可点击区域非常大,远远超出了图标本身。有谁知道如何设置可点击区域,或使其与图像大小相同?

由于

UIImage *buttonImage = [UIImage imageNamed:@"prefs"];

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];

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];

self.navigationItem.leftBarButtonItem = customBarItem;

可点击区域显示为红色。

Clickable area

谢谢!

2 个答案:

答案 0 :(得分:6)

如果你想阻止按钮以外的点击,那么将自定义按钮添加到UIView,然后将该视图设置为barbuttonItem的自定义视图

您的代码将如下所示:

UIImage *buttonImage = [UIImage imageNamed:@"prefs"];
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;

这应该适用于我。

答案 1 :(得分:0)

@Prasad Devediga,swift版本非常有效:

        let btnName = UIButton()
        btnName.setImage(UIImage(named: "settings_filled_25"), forState: .Normal)
        btnName.frame = CGRectMake(0, 0, 30, 30)
        btnName.addTarget(self, action: Selector("toggleRight"), forControlEvents: .TouchUpInside)

        var rightView = UIView()
        rightView.frame = CGRectMake(0, 0, 30, 30)
        rightView.addSubview(btnName)

        let rightBarButton = UIBarButtonItem()
        rightBarButton.customView = rightView
        self.navigationItem.rightBarButtonItem = rightBarButton