问题 在我的iPad应用程序中, 只有在按住事件之后,才能将popup窗口附加到button栏项目。 但是这似乎是撤销/重做的标准。 其他应用程序如何做到这一点? 背景 我有我的UIKit(iPad)应用程序工具栏中的撤消button(UIBarButtonSystemItemUndo)。 当我按下撤消button,它会触发它的撤消操作,并正确执行。 然而,在iPad上撤销/重做的“标准UE约定”是按下撤销执行撤消操作,但按住button显示一个popup式控制器,用户在撤销控制器之前select“撤消”或“重做”。 使用presentPopoverFromBarButtonItem来附加popover控制器的正常方法是:我可以很容易地configuration它。 为了让这个只在按下之后才显示,我们必须设置一个视图来响应“长按”手势事件,如下面的代码片段所示: 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]; 有了这个,在view上按下并按住handleLongPressOnUndoGesture:方法之后,将调用此方法,我将configuration并显示撤销/重做的popup窗口。 到现在为止还挺好。 这个问题是没有意见的 。 self.undoButtonItem是一个UIButtonBarItem,而不是一个视图。 可能的解决scheme 1)[理想] 将手势识别器附加到button栏项目 。 可以将一个手势识别器附加到一个视图,但UIButtonBarItem不是一个视图。 它具有.customView的属性,但是当buttonbaritem是标准系统types(在这种情况下)时,该属性为零。 2) 使用另一个视图 。 我可以使用UIToolbar,但是这需要进行一些奇怪的命中testing,并且如果可能的话,还是可以的。 没有其他可供select的使用方法,我可以想到。 3) 使用customView属性 。 像UIBarButtonSystemItemUndo这样的标准types没有customView(它是零)。 设置customView会删除它需要的标准内容。 这相当于重新实现了UIBarButtonSystemItemUndo的所有外观和function,如果可能的话。 题 […]
这篇文章说“Emacs有重做,因为你可以撤消方向,因此撤消撤消方向”。 这是什么意思? 用户如何重做Emacs?