我在尝试更改UITextView
的剪切/复制/粘贴行为时遇到了很大问题。
我想要实现的是:检测用户何时将一些文本粘贴到UITextView
。当我发现这个时,我会检查数据然后做我的事情。
根据文件,我发现了UIResponder
。
所以我创建了一个继承UITextView
的简单类。
在.m文件中,我创建了一个名为。
-(void) paste:(id)sender{
NSLog(@"paste button was pressed do something");
}
但由于某种原因,它似乎永远不会发生。我可以让select语句工作并跟踪数据。
-(void) select:(id)sender
1。这是在UITextView中检测粘贴的正确方法吗? 2.现在我正在跟踪购买多少字符UITextView更改,如果它大于一个字符,那么我怀疑它可能是一个粘贴操作。但由于iPhone可以自动完成单词,例如Wedn(到星期三),它可能不是粘贴操作。
在Interface Builder中,我在我的NIB文件中选择了我的textView,然后选择了它的“类标识”到我几乎创建的类之前,我知道这个文件是作为子类工作但它只是不响应粘贴事件
感谢。
答案 0 :(得分:3)
UITextView有一个处理剪切,复制和粘贴的视图。这是UIWebDocumentView。因此,如果UITextView是第一个响应者,UIWebDocumentView将首先获取它而不是您的实现。我想覆盖这些功能,所以这非常令人沮丧。
答案 1 :(得分:3)
同样的事情也发生在我身上。选择(并且有时复制)被调用但是从不粘贴。
我使用textViewDidChange模拟了行为,我总是验证当前文本和前一个文本之间的区别。如果有更多不同的字母,text.length大于必须粘贴的字号。
希望Apple能解决这个问题。
答案 2 :(得分:2)
如果有人仍然需要简短的解决方案,我会与我分享。我使用来自REKit project的精彩NSObject + REResponder类别。解决方案就像这样简单:
- (void)hookMessageTextFieldPasteAction
{
void (^textFieldDidPasteBlock)(id receiver, id sender) = ^(id receiver, id sender)
{
NSLog(@"paste hook");
};
[self.messageTextField respondsToSelector:@selector(paste:) withKey:nil usingBlock:textFieldDidPasteBlock];
}
答案 3 :(得分:1)
是的,根据Apple引用的here文档,您上面的粘贴代码是正确的。
- (void)paste:(id)sender
我怀疑你是在错误的文件中实现它。您应该在作为1st Responder链的一部分的文件中实现它。您是否已将UITextView子类化,或者您是否在ViewController中使用了vanilla?
嗯,我认为问题在于你可能需要让你的UITextView子类成为委托,以便委托方法起作用,因为它不是由事物的外观。我会试着找到我之前的表现。
好吧,我想我找到了它。我认为您需要在子类UITextField类上执行此操作:
@interface mySpecialTextFieldClass : NSObject <UITextFieldDelegate>
{
}
添加到最后应该有用,试一试! 它的作用是使你的子类成为一个类型的对象,委托可以发送通知给它...它的多态,除非有人想在这里纠正我:)
尝试John的最后一件事,在包含UITextView的IBOutlet的ViewController中,尝试在UITextView的实例上调用此方法:
[myUITextView setDelegate:self];
只是在那里抛出一些完全随意的东西,试着把它设置成第一响应者。
[myUITextView becomeFirstResponder];
这叫做黑暗小孩的编程!并且这是一种非常糟糕的编程方式,但我承认我这样做,有时它会得到回报:P lol。