Post

Replies

Boosts

Views

Activity

Reply to How can I change the background color of a focused item of a NSTableView?
Here is a solution i found: Remove the highlight style of your tableView like this: tableView.selectionHighlightStyle = .none Set different background in  tableViewSelectionDidChange method like this: func tableViewSelectionDidChange(_ notification: Notification) { guard let tableView = notification.object as? NSTableView else { return } guard tableView.selectedRow >= 0 else { for i in 0..<tableView.numberOfRows { guard let rowView = tableView.rowView(atRow: i, makeIfNecessary: false) else { return } rowView.backgroundColor = .clear } return } guard let rowView = tableView.rowView(atRow: tableView.selectedRow, makeIfNecessary: false) else { return } rowView.backgroundColor = .red.withAlphaComponent(0.1) } The full code can be found here.
Topic: UI Frameworks SubTopic: AppKit Tags:
Mar ’25
Reply to Sending messages from Google Chrome extension to macOS app
Seems like you can access $HOME/Library/Application\ Support/Google/Chrome/NativeMessagingHosts using this approach: func requestAccess() { let chromeNativeMessagingPath = NSString(string: "~/Library/Application Support/Google/Chrome/NativeMessagingHosts").expandingTildeInPath let openPanel = NSOpenPanel() openPanel.canChooseDirectories = true openPanel.canChooseFiles = false openPanel.allowsMultipleSelection = false openPanel.directoryURL = URL(fileURLWithPath: chromeNativeMessagingPath) openPanel.message = "Please grant access to the Chrome NativeMessagingHosts folder" openPanel.prompt = "Grant Access" openPanel.begin { [weak self] (result) in if result == .OK, let selectedURL = openPanel.url { // Bookmark the URL for persistent access do { let bookmarkData = try selectedURL.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil) UserDefaults.standard.set(bookmarkData, forKey: "ChromeNativeMessagingHostsBookmark") self?.accessDirectory(selectedURL) } catch { print("Failed to create security-scoped bookmark: \(error)") } } } } func accessDirectory(_ url: URL) { // Example of how to access the directory later using the bookmark do { // Start accessing the security-scoped resource guard url.startAccessingSecurityScopedResource() else { print("Failed to access security-scoped resource") return } // Now you have access to the directory, you can read/write files let fileManager = FileManager.default let contents = try fileManager.contentsOfDirectory(at: url, includingPropertiesForKeys: nil) print("Contents of directory: \(contents)") // When done, release the access url.stopAccessingSecurityScopedResource() } catch { print("Error accessing directory: \(error)") url.stopAccessingSecurityScopedResource() } }
Topic: Safari & Web SubTopic: General Tags:
Apr ’25
Reply to Keyboard Notification UIKit magic.
up. Also curious in how to override this value. Claude Code offered these two solutions: @objc private func reactOnKeyboardShowing() { DispatchQueue.main.async { UIView.animate(withDuration: 3) { [weak self] in self?.rectangleHeightConstraint.constant = 20 self?.layoutIfNeeded() } } } @objc private func reactOnKeyboardShowing() { let animator = UIViewPropertyAnimator(duration: 3, curve: .easeInOut) { [weak self] in self?.rectangleHeightConstraint.constant = 20 self?.layoutIfNeeded() } animator.startAnimation() } But it feels like the animation happens after the keyboard appears, not after it started launching...
Topic: UI Frameworks SubTopic: UIKit Tags:
2w