
在我的iPad应用程序,我不能附加popover到按钮栏项目,只有按住并保持事件。但是这似乎是undo / redo的标准。其他应用程序如何做到这一点?
背景
我在我的UIKit(iPad)应用程序的工具栏中有一个撤消按钮(UIbarbuttonSystemItemUndo)。当我按下撤消按钮,它会触发它的动作是undo :,并且正确执行。
然而,在iPad上撤消/重做的“标准UE约定”是按下撤消执行撤消,但按下并按住按钮显示d出控制器,其中用户选择“撤消”或“重做”,直到控制器被解除。
附加popover控制器的正常方式是使用presentPopoverFrombarbuttonItem :,我可以很容易配置这个。为了让这只显示在按住后,我们必须设置一个视图来响应“长按”手势事件,如下面的代码段:
UILongPressGestureRecognizer *longPressOnUndoGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnUndoGesture:)];//broken because there is no customVIEw in a UIbarbuttonSystemItemUndo item[self.undobuttonItem.customVIEw addGestureRecognizer:longPressOnUndoGesture];[longPressOnUndoGesture release];
有了这个,按下并保持在视图上的方法handleLongPressOnUndoGesture:将被调用,在这个方法中,我将配置和显示popover为撤消/重做。到现在为止还挺好。
这个问题是没有视图可以附加到。 self.undobuttonItem是一个UIbuttonbarItem,而不是一个视图。
可能的解决方案
1)[理想]将手势识别器附加到按钮栏项目。可以在视图中附加手势识别器,但是UIbuttonbarItem不是视图。它有一个属性.customVIEw,但该属性是nil当buttonbaritem是一个标准的系统类型(在这种情况下是)。
2)使用另一个视图。我可以使用UIToolbar,但这将需要一些奇怪的命中测试和一个全面的黑客,如果甚至可能在第一位。没有其他替代视图使用,我可以想到。
3)使用customVIEw属性。标准类型像UIbarbuttonSystemItemUndo没有customVIEw(它是nil)。设置customVIEw将会删除它需要的标准内容。这将等于重新实现UIbarbuttonSystemItemUndo的所有外观和功能,如果甚至可能做的话。
题
如何将手势识别器附加到此“按钮”?更具体地说,如何在iPad应用程序中实现标准的按住并显示重做d出框?
想法?非常感谢,特别是如果有人实际上在他们的应用程序工作(我在想你,omni),并想分享…
解决方法 为了替代尝试在工具栏的子视图列表中查找UIbarbuttonItem的视图,你也可以尝试这个,一旦项目被添加到工具栏:[barbuttonItem valueForKey:@"vIEw"];
这使用键值编码框架来访问UIbarbuttonItem的私有_vIEw变量,它保持它创建的视图。
授予,我不知道这在苹果的私人API的东西(这是公共方法用于访问一个公共类的私有变量 – 不像访问私有框架,以制作出一些苹果专用的效果或任何东西)它工作,而不是无痛。
总结以上是内存溢出为你收集整理的可爱触摸 – 如何添加一个UIGestureRecognizer到UIBarButtonItem像在常见的撤消/重做UIPopoverController方案在iPad应用程序?全部内容,希望文章能够帮你解决可爱触摸 – 如何添加一个UIGestureRecognizer到UIBarButtonItem像在常见的撤消/重做UIPopoverController方案在iPad应用程序?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)