更改位置后,UIBarButtonItem无法单击

时间:2016-10-02 12:56:50

标签: ios objective-c uinavigationbar uibarbuttonitem

我正在使用Xcode 8.0。 我在我的NavBar中添加了一个自定义左栏按钮:

UIImage * imageNormal = [UIImage imageNamed:@"InfoIcon"];
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(testPressed ) forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundImage:imageNormal forState:UIControlStateNormal];

// set the frame of the button
button.frame = CGRectMake(0, 0, imageNormal.size.width, imageNormal.size.height);

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

// set the barbuttonitem to be the view
UIBarButtonItem * barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

self.navigationItem.leftBarButtonItem = barButtonItem;

这是我得到的:

enter image description here

遗憾的是,我的按钮未居中,因为导航栏的自定义图像高于标准。但是,如果我按下信息图标就可以了。 如果我用这行代码更改图标位置:

button.frame = CGRectMake(0, -30, imageNormal.size.width, imageNormal.size.height);

我得到了正确的定位:

enter image description here

但在这种情况下,条形按钮不再可点击,我不明白为什么会发生这种情况。

作为解决方法,我将一个手势附加到视图:

UITapGestureRecognizer *_tapOnVideoRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self.revealViewController action:@selector(revealToggle:)];
[view addGestureRecognizer:_tapOnVideoRecognizer];

它可以工作,但点按在视图上而不在按钮上,这样当按下按钮时改变状态不起作用。

来自https://stackoverflow.com/a/12554715/1320479的@JakubKnejzlik 表明:

这可以通过继承包装器视图(按钮的superview,uibarbuttonitem的自定义视图)并重写hittest方法来相应地返回按钮来修复。 但我不知道该怎么做

0 个答案:

没有答案