It seems that I’ll be the first American in general & GitHub open-source history to ever make a NSTextFindBarContainer subclass. The window controller shows two views in a split view. The top half is a NSTableView surrounded by a NSScrollView. The bottom half is a NSTextView surrounded by a scroll view. Each one can handle NSTextFinder, but I’m considering them halves of the same document (since they are). So I’m make a single find-bar to cover both views. I’ve read about NSTitlebarAccessoryViewController and wonder if I can use it to hold the Find controls.
> class MyWindowController: NSWindowController { > //... > dynamic var representedMessage: RawMessage? > dynamic var isWritable: Bool = true > > // Outlets > @IBOutlet weak var messageController: NSObjectController! > @IBOutlet weak var headerController: NSArrayController! > @IBOutlet weak var textFinder: NSTextFinder! > @IBOutlet weak var accessoryView: NSVisualEffectView! > > // Pseudo-outlets > var headerViewController: NSViewController! > var bodyViewController: NSTabViewController! > var addBodyViewController: NSViewController! > var bodyTextViewController: NSViewController! > > var headerTableView: NSTableView! > var bodyTextView: NSTextView! > > /// Table of which characters, combining the header and body as a single > string, are where. > dynamic var textRanges = [NSMakeRange(0, 0)] > /// The accessory title-bar to contain the text-finding controls. > let findBar = NSTitlebarAccessoryViewController() > > //... > > override func windowDidLoad() { > super.windowDidLoad() > //... > findBar.layoutAttribute = .bottom > } > //... > } I added a NSTextFinder to my window controller’s top bar and added an outlet. I’m using the window controller class as the NSTextFinderClient delegate: > extension MyWindowController: NSTextFinderClient { > > /// Determine the right substring, from the text range map. > func string(at characterIndex: Int, effectiveRange outRange: > NSRangePointer, endsWithSearchBoundary outFlag: > UnsafeMutablePointer<ObjCBool>) -> String { > //... > } > > /// Determine the length of the virtual string, from the text range map. > func stringLength() -> Int { > return NSMaxRange(self.textRanges.last!) > } > > } and a NSTextFindBarContainer delegate: > extension MyWindowController: NSTextFinderBarContainer { > > var findBarView: NSView? { > get { return self.findBar.view } > set { self.findBar.view = newValue ?? /*self.accessoryView*/ NSView() > } > } > > func contentView() -> NSView? { > return self.window?.contentView > } > > var isFindBarVisible: Bool { > get { > return self.findBar.parent != nil > } > > @objc(setFindBarVisible:) set { > if newValue && self.findBar.parent == nil { > self.window?.addTitlebarAccessoryViewController(self.findBar) > } else if !newValue && self.findBar.parent != nil { > self.findBar.removeFromParentViewController() > } > } > } > > func findBarViewDidChangeHeight() { > // Do I need to do something here? > } > > } I have no idea if what I’m doing here is even close to being right. (The “accessoryView” property maps to a NSVisualEffectView that I made because I thought “NSView()” was wrong at first. It made no difference.) When I try running the app, creation of the first window is jammed by: > 2017-03-28 15:33:27.659649 XNW[51906:6766586] -[NSNib > _initWithNibNamed:bundle:options:] could not load the nibName: > NSTitlebarAccessoryViewController in bundle (null). > 2017-03-28 15:33:27.677235 XNW[51906:6766586] -[NSNib > _initWithNibNamed:bundle:options:] could not load the nibName: > NSTitlebarAccessoryViewController in bundle (null). Is anyone from Apple and/or has privately made a NSTextFindBarContainer class capable of helping? As I said, there are no answers from WebSearch (i.e. others will be helped by me). Is there Apple sample code that covers this? — Daryle Walker Mac, Internet, and Video Game Junkie darylew AT mac DOT com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com