2017-03-07 3 views
1

Deshalb mag ich den Benutzer fragen, über Blatt, etwas in einem modalen Dialog:Einstellung Ersthelfer auf modal Blatt

class MyTextView : NSTextView { 
    override func viewWillDraw() { 
     dispatch_async(dispatch_get_main_queue()) { 
      self.window?.makeFirstResponder(self) 
     } 
    } 
} 

private func requestNotification() { 
    let alert = NSAlert() 
    alert.alertStyle = NSAlertStyle.InformationalAlertStyle 
    alert.messageText = "Enter your email address" 

    let urlField = MyTextView.init(frame: NSMakeRect(0,0,300,28)) 
    let urlScroll = NSScrollView.init(frame: NSMakeRect(0,0,300,28)) 
    urlScroll.hasVerticalScroller = true 
    urlScroll.autohidesScrollers = true 
    urlField.drawsBackground = true 
    urlField.editable = true 

    urlScroll.documentView = urlField 
    alert.accessoryView = urlScroll 

    alert.addButtonWithTitle("Send") 
    alert.addButtonWithTitle("Cancel") 

    alert.beginSheetModalForWindow(self.window!, completionHandler: { response in 
     if response == NSAlertFirstButtonReturn { 
      // Send 
      let view = (alert.accessoryView as! NSScrollView).documentView as! NSTextView 
      let text = view.string! as String 
      self.webViewController.loadAlmostURL(text) 
     } 
    }) 
} 

, die viel besser als Versuche mit einem NSTextField fungiert.

Zumindest die Interaktion beginnt mit der Eingabe, aber ich möchte die Textansicht begrenzen?

+0

Nun, sub-Klassierung NSTextField ich es das erste Responder machen kann, aber die Bearbeitung überlappt, wie etwas nicht war richtig geladen; Ich werde das Original damit aktualisieren. – slashlos

+0

Verwenden Sie stattdessen NSTextView; Dies führt jedoch zu einem anderen Problem, das in eine Bildlaufansicht eingebettet werden muss, die wiederum Beschränkungen erfordert, damit vertikales Scrollen möglich ist. – slashlos

Antwort

0

Code-Snippet tut so ziemlich alles, außer dem Border-Rect wie in einem NSTextField.

0

Wenn Sie dies mit einem NSTextField versuchen, scheinen die wiederholten Aufrufe von ViewWillDraw den blinkenden Cursor zu stören und durch den Dialog zu navigieren. Um das zu beheben, legen Sie ein Flag in der viewWillDraw Routine, um nur die firstResponder einmal gesetzt, so etwas wie dieses:

class AlertTextField : NSTextField { 

    var doOnce = true 
    override func viewWillDraw() { 
     if doOnce { 
      DispatchQueue.main.async() { 
       self.window?.makeFirstResponder(self) 
       self.doOnce = false 
      } 
     } 
    } 
}