我有一个带有自定义 UIBarButtonItem 的 UINavigationBar(它使用 UIButton 作为其自定义视图)。问题是:自定义按钮的活动区域太大,如果我在按钮外点击至少 40 像素,它仍然会被注册为按钮上的点击。这会导致意外点击。如何减少这些按钮的活动区域?
问问题
4070 次
3 回答
6
我也注意到了这个奇怪的地方。我发现使用容器 UIView 可以解决这个问题。例如:
UIButton *menuButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[menuButton addTarget:self action:@selector(revealMenu:) forControlEvents:UIControlEventTouchUpInside];
[menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal];
UIView *menuButtonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[menuButtonContainer addSubview:menuButton];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonContainer];
于 2013-01-14T00:41:12.193 回答
0
您是通过 Interface Builder 添加按钮还是以编程方式添加按钮?无论哪种方式,您都可以使用这行代码来设置图像的边界:
yourButton.bounds = CGRectMake( 0, 0, yourImage.size.width, yourImage.size.height );
如果您想要一个完整的示例,这是我在我的一个应用程序中使用的示例:
UIImage *image = [UIImage imageNamed:@"audio-off.png"];
UIButton *myMuteButton = [UIButton buttonWithType:UIButtonTypeCustom];
myMuteButton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );
[myMuteButton setImage:image forState:UIControlStateNormal];
[myMuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *myMuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myMuteButton];
navBar.leftBarButtonItem = myMuteBarButtonItem;
[myMuteBarButtonItem release];
于 2010-07-09T01:29:19.643 回答
0
我想你还没有改变自定义按钮的大小......试试这样做......在界面生成器中选择你想要减少活动区域的按钮,然后按“Command + 3”或“工具-->尺寸检查器”,减少 'W' 和 'H' 值......这将使自定义按钮更小,因此活动区域也会减少......
~拉维拉佳
于 2010-07-08T10:49:47.043 回答