[UIMenuController sharedMenuController].isMenuVisible всегда будет НЕТ в EGOTextView
Я использую EGOTextView для редактирования NSAttributedString. Есть ошибка на UIMenuController
который я не смог преодолеть Согласно логике, описанной в следующем коде, UIMenu будет попеременно отображаться и скрываться после нажатия на EGOTextView. Но дело в том, [UIMenuController sharedMenuController].isMenuVisible
никогда не получит, что код [menuController setMenuVisible:NO animated:NO];
никогда не позвонят. Есть ли какая-то хитрая вещь, которую я пропустил? Спасибо за любое предложение!
EGOTextView.m
- (void)tap:(UITapGestureRecognizer*)gesture {
NSLog(@"[UIMenuController sharedMenuController].isMenuVisible :%d",[UIMenuController sharedMenuController].isMenuVisible);
// It always log 0 even if the UIMenu is visible on the screen.
if (_editable && ![self isFirstResponder]) {
[self becomeFirstResponder];
return;
}
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showMenu) object:nil];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showCorrectionMenu) object:nil];
self.correctionRange = NSMakeRange(NSNotFound, 0);
if (self.selectedRange.length>0) {
self.selectedRange = NSMakeRange(_selectedRange.location, 0);
}
NSInteger index = [self closestWhiteSpaceIndexToPoint:[gesture locationInView:self]];
if (_delegateRespondsToDidSelectURL && !_editing) {
if ([self selectedLinkAtIndex:index]) {
return;
}
}
UIMenuController *menuController = [UIMenuController sharedMenuController];
NSLog(@"menuController.menuVisible :%d", menuController.menuVisible);
if ([menuController isMenuVisible]) {
// never run into here
[menuController setMenuVisible:NO animated:NO];
} else {
if (index==self.selectedRange.location) {
[self performSelector:@selector(showMenu) withObject:nil afterDelay:0.35f];
} else {
if (_editing) {
[self performSelector:@selector(showCorrectionMenu) withObject:nil afterDelay:0.35f];
}
}
}
[self.inputDelegate selectionWillChange:self];
self.markedRange = NSMakeRange(NSNotFound, 0);
self.selectedRange = NSMakeRange(index, 0);
[self.inputDelegate selectionDidChange:self];
}
2 ответа
Я нашел код ниже, и [menuController setMenuVisible:NO animated:NO]; должна быть точка, которая устанавливает UIMenuController невидимым.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
if ([gestureRecognizer isKindOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")]) {
UIMenuController *menuController = [UIMenuController sharedMenuController];
if ([menuController isMenuVisible]) {
[menuController setMenuVisible:NO animated:NO];
}
}
return NO;
}
Функция - (void) жест:(UITapGestureRecognizer*) запускается после - (BOOL) gestRecognizer:(UIGestureRecognizer *)gestRecognizer shouldRecognizeSim одновременно ouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer.
Может быть, вы должны попытаться найти "setMenuVisible:NO". Это также должно быть написано где-то еще.