focus a NSTextField

后端 未结 5 2076
深忆病人
深忆病人 2020-12-08 08:55

I have a NSTextField and I want to set its content if I klick on a button and than set the cursor on this textfield at the end of the text so if someone klicks the button he

相关标签:
5条回答
  • 2020-12-08 09:00

    Ok I found it out now :)

    - (IBAction)focusInputField:(id)sender {
        [textField selectText:self];
        [[textField currentEditor] setSelectedRange:NSMakeRange([[textField stringValue] length], 0)];  
    }
    

    and in RubyCocoa it is:

    def select_input_field
        @input.selectText self
        range = OSX::NSRange.new(@input.stringValue.length, 0)
        @input.currentEditor.setSelectedRange range
    end
    
    0 讨论(0)
  • 2020-12-08 09:04

    Some time ago I did similar task. My solution was write down small category method for partial text selection for NSTextField. This method does job like original selectText: does (with setting focus to control).

    @implementation NSTextField( SelExt )
    
    -(void)selectTextRange:(NSRange)range
    {
       NSText *textEditor = [self.window fieldEditor:YES forObject:self];
       if( textEditor ){
          id cell = [self selectedCell];
          [cell selectWithFrame:[self bounds] inView:self 
                editor:textEditor delegate:self
                start:range.location length:range.length];
       }
    }
    
    @end
    

    with this method you may place text selection where you want and start typing right after that.

    0 讨论(0)
  • 2020-12-08 09:06

    or even easier

    [yourTextField becomeFirstResponder];
    
    0 讨论(0)
  • 2020-12-08 09:15

    I am writing an ingame plugini, I were having a similar problem:

    - (void)gotEvent:(NSEvent *)newEvent
    {
      [mainWindow makeKeyAndOrderFront:self];
      [mainWindow makeFirstResponder:messageField];
      [mainWindow sendEvent:newEvent]; // will forward the typing event
    }
    

    this does the job :)

    0 讨论(0)
  • 2020-12-08 09:20

    You'll want to do something like this:

    [[self window] makeFirstResponder:[self yourTextField]];
    
    0 讨论(0)
提交回复
热议问题