【问题标题】:iOS moving cursor from keyboard extensioniOS从键盘扩展移动光标
【发布时间】:2016-11-06 09:29:00
【问题描述】:

我们可以像这样轻松地更新 UITextfield 的光标位置。

[textField setSelectedRange:beginningRange];

是否可以从键盘扩展更新光标位置?我正在检查 textDocumentProxy 和 inputView。

【问题讨论】:

    标签: ios objective-c ios-keyboard-extension


    【解决方案1】:

    只需将选择的长度设置为零。

    一种可能的实现方式:

    + (void)setCursorInTextField:(UITextField *)textField atIndex:(NSInteger)index {
        UITextPosition *start = [textField positionFromPosition:[textField beginningOfDocument] offset:index];
        UITextPosition *end = [textField positionFromPosition:start offset:0];
        [textField setSelectedTextRange:[textField textRangeFromPosition:start toPosition:end]];
    }
    

    【讨论】:

      【解决方案2】:

      我知道该怎么做。

      - (void)moveCursorToLeft {
          [self.textDocumentProxy adjustTextPositionByCharacterOffset:-1];
      }
      
      - (void)moveCursorToRight {
          [self.textDocumentProxy adjustTextPositionByCharacterOffset:1];
      }
      

      【讨论】:

        【解决方案3】:

        只需将 uiPanGestureRecignizer 添加到 uiview 或 uibutton 即可左右滑动。

        UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handleGesture:)];
            pan.maximumNumberOfTouches = 1;
            [_yourView
             addGestureRecognizer:pan];
        

        然后实现handleGesture函数来得到你的结果。

        -(void)handleGestureNum:(UIPanGestureRecognizer *)gestureRecognizer{
            //Making Direction Indication
        float deltaPanX;
                CGPoint velocity = [gestureRecognizer velocityInView:gestureRecognizer.view];
                deltaPanX += 0.1+fabs(velocity.x/500);
                int offset = 0;
                if (deltaPanX >= 1) {
                    offset = 1;
                    deltaPanX = 0;
                }
                if (velocity.x > 0) {
                    NSLog(@"gesture moving right: counter-:@%f",velocity.x);
                    [self.textDocumentProxy adjustTextPositionByCharacterOffset:offset];
        
                }else{
                    NSLog(@"gesture moving left: counter-:@%f",velocity.x);
                    [self.textDocumentProxy adjustTextPositionByCharacterOffset:-offset];
                }
        
                if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
        
                    NSLog(@"UIGestureRecognizerStateBegan");
                }
                else if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
        
        
                    //        [animView removeFromSuperview];
        
                }else if (gestureRecognizer.state == UIGestureRecognizerStateFailed){
                    // Do something if needed
                }
        
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-21
          • 2014-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多