SnoopDogg
SnoopDogg

Reputation: 491

SwiftUI TextField cursor colour

Currently the cursor/caret for my SwiftUI TextField is blue. Is there an API for cursor colour or a workaround?

Upvotes: 35

Views: 16547

Answers (4)

Lawrence Gimenez
Lawrence Gimenez

Reputation: 3237

For Xcode 15, I just use the Assets resources, I added a Cursor color set. And I use it on the tint modifier.

enter image description here

For example

import SwiftUI

struct MyTextFieldStyle: TextFieldStyle {
    
    func _body(configuration: TextField<Self._Label>) -> some View {
        configuration
            .tint(Color(.cursor))
    }
}

And you can use it in the textFieldStyle() modifier like

.textFieldStyle(MyTextFieldStyle())

Upvotes: 1

Oranges
Oranges

Reputation: 9

This for me worked to change the cursor color for TextEditor. I put the code below as my app initialiser, thus making all of my apps cursors (TextEditor) pink.

init() {
    UITextView.appearance().tintColor = .systemPink
}

At the time of writing I have Xcode 13.4.1

Upvotes: 0

shim
shim

Reputation: 10116

EDIT: as pointed out below and in the documentation, my original answer (below) is now deprecated and you should use .tint instead. Or if you want all text fields and other UI elements in your app to be the same you can customize your app’s global accentColor.

Original answer:

Tried it out and .accentColor does the trick.

TextField(" Enter some text", text: $name)
    .accentColor(.yellow)

Upvotes: 65

Jake
Jake

Reputation: 235

The other answer didn't work for me but this did! It doesn't look like the cursor plays well with SwiftUI custom line spacing however...

extension NSTextView {
    open override var frame: CGRect {
        didSet {
            insertionPointColor = .black
        }
    }
}

Upvotes: 9

Related Questions