iPhone:如何制作易于点击的UIButton?

7
我正在使用UIViewUIButtons制作定制的导航栏,而不是使用UINavigationBar。但是我的导航栏上的UIButtons反应缓慢。我必须点击按钮的中心位置才能生效,如果我点击按钮边缘,则不起作用。然而在普通的UINavigationBar上的按钮可以通过点击按钮的边缘来触发响应,甚至可以在按钮外部点击触发。相机应用程序上的快门按钮或选项按钮也可以通过点击按钮的边缘或外部来触发响应。我该如何实现那些容易被轻松点击的按钮到我的应用程序中?

2
一些示例代码可能有助于诊断问题。 - Ben Gottlieb
@ben 谢谢。我会寻找示例代码。 但这不是我的问题。我认为这是 UIButton 的规范。 所有的 UIButton 都比 UINavigationBar 的按钮不敏感。 我想知道一些属性或方法来扩展可点击的区域。 - js_
UIButton通常具有非常大的点击区域。很可能是您配置不正确,而不是它们损坏了,需要您解决。Ben对代码的请求是正确的。 - Rob Napier
@Rob 不是很大。请在真实设备上轻触并比较示例代码中的 UIButton 和导航栏按钮,例如 UICatalogAddMusic。请勿使用模拟器。 - js_
3个回答

11

使用图像创建自定义按钮。 将按钮设置为不按照按钮视图的大小缩放图像,而是仅居中。 扩展按钮的大小,使其比每侧的图像更大。 Apple也会在诸如选项卡按钮之类的东西上这样做。


只是为了澄清,按钮的实际大小比它显示的图像要大得多,因此可触摸区域比图像尺寸大得多,尽管只有图像出现,但触摸敏感区域要大得多。 - Owen Hartnett
1
谢谢!它有效了。我发现 UIButton 的 inset 属性也可以用于扩大点击区域。同时,给图像添加透明边距也可以扩大点击区域。 - js_

10

UIButton有一个imageEdgeInsets属性,专门用于此目的。只需将UIButton框架设置为所需的可触摸区域大小,然后适当缩放图像,使用imageEdgeInsets即可。


4

免责声明:此代码未经测试,但可以让您了解如何完成。

您可以创建一个按钮(在本例中为40px x 40px),然后向其添加一个较小的背景图像,因此给人一种非常“可点击”的印象。

// This image is 20px x 20px (Just an example)
UIImage* backgroundImage = UIImage imageNamed:@"backgroundImage.png"]

// Custom button, remember to add a target method
UIButton* customButton = [UIButton buttonWithType:UIButtonTypeCustom];
customButton.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
customButton.contentMode = UIViewContentModeCenter;
[customButton setImage:backgroundImage forState:UIControlStateNormal];

UIBarButtonItem* customBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customButton];
self.navigationItem.rightBarButtonItem = customBarButtonItem;
[customBarButtonItem release];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接