2014-09-02 2 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 секунд. Ситуация, известная как длинный жест прессы, и вот ссылка на вопросы simliar.

Long press gesture on UICollectionViewCell

+0

Рекомендуется использовать все детали в ответе. Если вы просто хотите связать это скорее комментарий. –

+0

Если есть ответ, почему я должен отвечать снова? И я не мог победить парня, так как ссылка очень подробная. –

+2

Если вы считаете, что вопрос тот же, это дубликат. Если вы собираетесь «ответить», показывая кому-то решение elses, вы должны прокомментировать. Если у вас есть решение, которое вы предоставляете себе, вы должны написать все детали в ответе. –

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

Swift 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; 
Смежные вопросы