5

私は現在カスタムキーボードを構築しており、ほぼ完成しています。私が抱えている問題の1つは、削除ボタンにあります。ユーザーが削除ボタンをタップすると、本来の処理が実行され、前のテキスト エントリが削除されます。ただし、ユーザーがボタンを押したままにすると、何も起こりません。ユーザーが削除ボタンを押したままにすると、標準のiosキーボードのようにキーボードが連続して削除されるようにするにはどうすればよいですか? これは私の現在のコードです:

プラグマ マーク キーボード

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

と:

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

ご協力いただきありがとうございます。

4

4 に答える 4

7

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()
}
于 2016-10-21T16:40:20.047 に答える
2

touchdown、touchupinside、touchoutside などのボタンのイベントを管理することでこれを行うことができます。

その時点でボタンを押すと、0.2秒の遅延でタイマーが開始され、ボタンの touchup メソッドが起動するまで textDocumentProxy から最後の文字が削除されます。その後、タイマーを無効にする必要があります。

[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];
    }
});

-(void)kpTimerMethod:(NSTimer *)timer

if (self.btnDelete.highlighted)
{
    [self deleteLastCharacter];
}
else
{
    [timer invalidate];
    self.kpTimer = nil;
}

-(void)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];

-(無効) btnTouchUp

[self.kpTimer invalidate];
self.kpTimer = nil;
于 2017-01-06T10:40:13.867 に答える
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];
}
于 2015-07-24T06:22:32.387 に答える