在我的应用程序中,我希望自定义一个当前显示用户位置的条形按钮,这样如果用户点按并按住它,则会显示带有其他信息的子视图。但似乎我只能发一个动作。这是绝对的情况还是有一种方法可以让我有多个动作?我知道有一个子类可以启用用户定位位置(比如在地图应用程序中) - 我可以以某种方式实现类似的功能吗?
答案 0 :(得分:6)
创建您自己的UIButton
并添加所需的所有手势识别器或操作。然后使用UIBarButtonItem
创建initWithCustomView:
。
UIButton *btn = // create button as needed
btn.showsTouchWhenHighlighted = YES; // keep the "glow" effect
[btn addTarget:self action:@selector(someSelector) forControlEvents:someEvent];
// repeat as needed for different events/selectors
// or add gesture recognizers
UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
答案 1 :(得分:0)
UIBarButtonItems只发送一个事件。您需要创建自己的自定义控件,向其添加手势识别器以识别点击和长按,并使用您的自定义控件创建一个条形按钮项。
答案 2 :(得分:0)
正如其他评论所说:无法在原生条形按钮上添加“长按”手势识别器。有两种方法可以解决这个问题:
1)找到代表视图层次结构中按钮的UIView,并为其添加手势识别器。更多信息here。这是非常简单的,只需几行代码即可完成,但如果将来内部结构化的观点发生变化,可能会中断。
2)通过将UIButton拖到其上(Interfacebuilder)或以编程方式设置customView属性,为导航栏按钮设置customView。然后,您需要为该UIButton提供navBarButton的外观并为其添加手势识别器。