您可以通过管理按钮的事件,如着陆,touchupinside和touchoutside做到这一点。
当按下此时按钮启动延时0.2秒的计时器,并删除textDocumentProxy中的最后一个字符,直到按钮的touchup方法启动,之后您只需要使计时器无效。
[self.btnDelete addTarget:self action:@selector(btnTocuhDown:) forControlEvents:UIControlEventTouchDown];
[self.btnDelete addTarget:self action:@selector(btnTouchUp:) forControlEvents:UIControlEventTouchUpInside];
[self.btnDelete addTarget:self action:@selector(btnTouchUp:) forControlEvents:UIControlEventTouchUpOutside];
- (无效)btnTocuhDown
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(kpTimerMethod:) userInfo:nil repeats:YES];
self.kpTimer = timer;
__weak typeof(self)weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void){
if (timer == self.kpTimer) {
[weakSelf.kpTimer fire];
}
});
- (无效)kpTimerMethod:(的NSTimer *)定时器
if (self.btnDelete.highlighted)
{
[self deleteLastCharacter];
}
else
{
[timer invalidate];
self.kpTimer = nil;
}
- (无效)deleteLastCharacter
NSString *strInput = self.textDocumentProxy.documentContextBeforeInput;
if (strInput.length > 1)
NSString *coupleOfLastCharacters = [strInput substringWithRange:NSMakeRange(strInput.length-2, 2)];
if([@"yo" caseInsensitiveCompare:coupleOfLastCharacters] == NSOrderedSame) {
[self.textDocumentProxy deleteLastCharacter];
}
}
[self.textDocumentProxy deleteLastCharacter];
- (void)btnTouchUp
[self.kpTimer invalidate];
self.kpTimer = nil;
这是包含答案中所有细节的最佳做法。如果你只是想链接更多的评论。 – 2014-09-02 22:28:07
如果有答案,为什么我应该再回答?由于链接非常详细,我无法击败这个人。 – 2014-09-02 22:29:51
如果你认为问题是相同的,它是重复的。如果您要通过展示某人else解决方案来“回答”您应该评论。如果你有自己提供的解决方案,你应该在答案中写下所有的细节。 – 2014-09-02 22:35:46