tôi đã không thể có được nó làm việc ngay cả khi tôi đọc tất cả các câu trả lời của bạn. Tôi đang trình bày mã sẵn sàng sẽ hoạt động với mọi người.
Giả sử chúng tôi có lớp điều khiển có tên Bộ điều khiển. Bạn chỉ có thể dán đoạn mã sau để điều khiển này có menu làm việc trên quan điểm của mình:
- (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;
}
gì đã được thực hiện để cho menu để làm việc là firstResponder (trong trường hợp của chúng tôi điều khiển của chúng tôi - xem dòng với [tự trở thànhFirstResponder]) phải có khả năng trở thành người trả lời đầu tiên (phương thức ghi đè canBecomeFirstResponder gây ra việc trả về mặc định NO) cũng như - (BOOL) canPerformAction:(SEL)selector withSender:(id) sender
, nên trả lại CÓ cho bất kỳ hành động nào có thể được thực hiện bởi firstResponder
nhận xét có giới hạn ký tự - vì vậy tôi đăng mã tại đây. –
chỉ tìm thấy giải pháp thay thế: Đặt UITextField vô hình trong chế độ xem và đặt làm phản hồi đầu tiên. Sau đó, menu sao chép sẽ xuất hiện chính xác. –
Tôi đang gặp vấn đề tương tự này (chế độ xem tùy chỉnh của tôi là lớp con của UITableViewCell; nhưng nếu không thì đó là tình huống tương tự). Một UITextField vô hình không giúp tôi. Menu vẫn không hiển thị và menuFrame vẫn là tất cả các số không. Ngoài ra, bàn phím bật lên bất cứ khi nào tôi làm cho UITextField trở thành một phiên bản đầu tiên. Bạn có thể đăng một số mã mẫu cho công việc của bạn không? –