al_*_*lea 19 iphone cocoa-touch iphone-sdk-3.0 uimenucontroller
我正在尝试使用以下代码:
UIMenuController * menu = [UIMenuController sharedMenuController];
[menu setTargetRect: CGRectMake(100, 100, 100, 100) inView: self.view];
[menu setMenuVisible: YES animated: YES];
Run Code Online (Sandbox Code Playgroud)
菜单实例已准备就绪,但未显示 - 宽度始终为零.
或者是否有关于此UIPasteboard/UIMenuController主题的示例代码?
kra*_*nyk 49
即使我读完你所有的答案,我也无法使它工作.我正在提供适用于所有人的现成代码.
假设我们有一个名为Controller的控制器类.您只需将以下代码粘贴到此控制器即可使菜单处于其视图中:
- (void)loadView {
[super loadView];
UILongPressGestureRecognizer *gr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[self.view addGestureRecognizer:gr];
}
- (void) longPress:(UILongPressGestureRecognizer *) gestureRecognizer {
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
CGPoint location = [gestureRecognizer locationInView:[gestureRecognizer view]];
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *resetMenuItem = [[UIMenuItem alloc] initWithTitle:@"Item" action:@selector(menuItemClicked:)];
NSAssert([self becomeFirstResponder], @"Sorry, UIMenuController will not work with %@ since it cannot become first responder", self);
[menuController setMenuItems:[NSArray arrayWithObject:resetMenuItem]];
[menuController setTargetRect:CGRectMake(location.x, location.y, 0.0f, 0.0f) inView:[gestureRecognizer view]];
[menuController setMenuVisible:YES animated:YES];
}
}
- (void) copy:(id) sender {
// called when copy clicked in menu
}
- (void) menuItemClicked:(id) sender {
// called when Item clicked in menu
}
- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender {
if (selector == @selector(menuItemClicked:) || selector == @selector(copy:)) {
return YES;
}
return NO;
}
- (BOOL) canBecomeFirstResponder {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
要使菜单工作,必须做的是firstResponder(在我们的例子中我们的控制器 - 见[self becomeFirstResponder]行)必须能够成为第一响应者(覆盖方法canBecomeFirstResponder导致默认实现返回NO)以及因为- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender这应该是返回到可以由执行任何动作firstResponder
小智 7
如果您正在实现自定义视图并且该视图应该是响应者(而不是其他视图,如UITextField),则需要在视图中覆盖canBecomeFirstResponder函数并返回YES:
- (BOOL)canBecomeFirstResponder {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
然后,当您显示菜单时,您应该执行以下操作:
- (void)myMenuFunc {
if (![self becomeFirstResponder]) {
NSLog(@"couldn't become first responder");
return;
}
UIMenuController *theMenu = [UIMenuController sharedMenuController];
CGRect selectionRect = CGRectMake(0, 0, 0, 0);
[theMenu setTargetRect:selectionRect inView:self];
[theMenu setMenuVisible:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
如果有人仍然有问题:我的菜单曾经工作,有一天奇迹般停止工作.我的应用程序中的其他所有内容仍然可用 现在我已经[window makeKeyAndVisible]从application:didFinishLaunchingWithOptions:方法中删除了方法,而其他一切仍然有效,这就打破了UIMenuController!
愚蠢的错误在我身边,很难找到罪魁祸首......
您不需要将UIMenuController* menuEG 添加到主视图或子视图吗self.view?我认为这就像[self.view addSubView:menu.view];或者我错过了你问题的要点。您可能还想设置菜单视图的框架。
| 归档时间: |
|
| 查看次数: |
32941 次 |
| 最近记录: |