2014-09-02 51 views
4

我目前正在构建一个自定义的键盘,我差不多完成了。我有一个问题是删除按钮。当用户点击删除按钮时,它将执行该操作并删除以前的文本条目。但是,当用户按下按钮时,什么都不会发生。我该如何做到这一点,以便当用户按住删除按钮时,键盘会不断删除,就像标准的ios键盘一样?这是我当前的代码:ios 8自定义键盘保持按钮删除?

编译标记键盘

- (void)addGesturesToKeyboard{ 
[self.keyboard.deleteKey addTarget:self action:@selector(pressDeleteKey)forControlEvents:UIControlEventTouchUpInside]; 

和:

-(void)pressDeleteKey{ 
[self.textDocumentProxy deleteBackward]; 
} 

感谢您的帮助。

回答

0

触摸屏幕后立即设置计数器,例如2-5秒。 这种情况称为长按手势,这里是链接到同样的问题。

Long press gesture on UICollectionViewCell

+0

这是包含答案中所有细节的最佳做法。如果你只是想链接更多的评论。 – 2014-09-02 22:28:07

+0

如果有答案,为什么我应该再回答?由于链接非常详细,我无法击败这个人。 – 2014-09-02 22:29:51

+2

如果你认为问题是相同的,它是重复的。如果您要通过展示某人else解决方案来“回答”您应该评论。如果你有自己提供的解决方案,你应该在答案中写下所有的细节。 – 2014-09-02 22:35:46

1
- (void)addGesturesToKeyboard{ 

UILongPressGestureRecognizer *ges = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; 
    ges.minimumPressDuration = 0.1; 
    ges.numberOfTouchesRequired = 1; 
    ges.delegate = self; 
    [self.mykeyboard.deleteKey addGestureRecognizer:ges]; 
} 

- (void)longPress:(UILongPressGestureRecognizer*)gesture { 


     [self.textDocumentProxy deleteBackward]; 
} 
3

斯威夫特3使用“allowableMovement”财产

override func viewDidLoad() { 
    super.viewDidLoad() 

    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(KeyboardViewController.handleLongPress(_:))) 
    longPress.minimumPressDuration = 0.5 
    longPress.numberOfTouchesRequired = 1 
    longPress.allowableMovement = 0.1 
    buttonDelete.addGestureRecognizer(longPress) 
} 

func handleLongPress(_ gestureRecognizer: UIGestureRecognizer) { 
    textDocumentProxy.deleteBackward() 
} 
2

您可以通过管理按钮的事件,如着陆,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;