UIMenuController 和 UITextView 选定的文本
Posted
技术标签:
【中文标题】UIMenuController 和 UITextView 选定的文本【英文标题】:UIMenuController and UITextView selected text 【发布时间】:2014-09-16 09:28:39 【问题描述】:首先我使用这个 UITextView 类
textViewClass.h
@interface textViewClass : UITextView
textViewClass.m
@implementation textViewClass
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
NSMutableArray *items = [[[UIMenuController sharedMenuController] menuItems] mutableCopy];
if (!items) items = [[NSMutableArray alloc] init];
UIMenuItem *menuItem;
menuItem = [[UIMenuItem alloc] initWithTitle:@"Add note" action:@selector(doSomethingHere:)];
[items addObject:menuItem];
[[UIMenuController sharedMenuController] setMenuItems:items];
return self;
- (void)doSomethingHere:(UITextView *)textView
NSLog(@"add note: ");
在 MainViewController.h 中
#import "textViewClass.h"
@interface testViewController : UIViewController <UITextViewDelegate>
@property (strong, nonatomic) IBOutlet textViewClass *myTextView;
在 MainViewController.m 中
- (void)viewDidLoad
[super viewDidLoad];
[self.myTextView setEditable:NO];
[self.myTextView setDelegate:self];
[self.myTextView setText:@"Lorem ipsum dolor sit er elit lamet,
consectetaur cillium adipisicing pecu,
sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat."];
#pragma mark - UITextView Delegate
- (void)textViewDidChangeSelection:(UITextView *)textView
NSString *string = [self.myTextView textInRange:textView.selectedTextRange];
NSLog(@"%@", string);
当我在 myTextView 中选择一些文本并将此选择复制到剪贴板并根据需要执行一些操作时,我想显示“添加注释”。
【问题讨论】:
【参考方案1】:嗯,您需要进行两次更正。 首先是:
你必须在你的自定义UITextView
类中实现这样的UIResponder
方法。
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
if (action == @selector(doSomethingHere:) || action == @selector(copy:))
if (self.selectedRange.length > 0)
return YES;
return NO;
在这里,您使用在UIResponderStandardEditActions 非正式协议下定义的代码过滤操作。
if (action == @selector(doSomethingHere:) || action == @selector(copy:))
如果你只需要yourAction
,那么就这样做
if (action == @selector(doSomethingHere:))
第二次更正:如果你这样实现协议
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
return YES;
默认情况下你会看到所有可能的命令:要么通过选择器过滤它,要么像这样添加你自己的命令,
UIMenuItem *menuItem;
menuItem = [[UIMenuItem alloc] initWithTitle:@"Add note" action:@selector(doSomethingHere:)];
[items addObject:menuItem];
[[UIMenuController sharedMenuController] setMenuItems:@[menuItem]];
希望对你有帮助...
注意:更多信息请查看NSHipster
【讨论】:
以上是关于UIMenuController 和 UITextView 选定的文本的主要内容,如果未能解决你的问题,请参考以下文章
从 UIText 字段的用户输入更改 UIView 框架的高度和宽度
禁用 UILabel、UIText 等的自动调整字体。在 iOS/Swift 中?
UIScrollView、UIMenuController 和 LongPress 手势