Durch die Delegation Protokoll habe ich versucht, eine Zeichenfolge zu übergeben (inputFromUser.string) von NSViewController - mainController, um benutzerdefinierte Unterklasse von NSView von NSPopover - unter PlasmidMapView, zu drawRect Funktion finden Sie Code. Aber es hat nicht funktioniert. Ich weiß nicht, wo ein Fehler ist. Vielleicht gibt es eine andere Möglichkeit, diese Zeichenfolge zu übergeben.Wie übergebe ich den Wert von NSViewController an die benutzerdefinierte NSView von NSPopover?
aktualisieren
Datei 1.
protocol PlasmidMapDelegate {
func giveDataForPLasmidMap(dna: String)
}
class MainController: NSViewController {
@IBOutlet var inputFromUser: NSTextView!
var delegate: plasmidMapDelegate?
@IBAction func actionPopoverPlasmidMap(sender: AnyObject) {
popoverPlasmidMap.showRelativeToRect(sender.bounds,
ofView: sender as! NSView, preferredEdge: NSRectEdge.MinY)
let dna = inputDnaFromUser.string
delegate?.giveDataForPLasmidMap(dna!)
}
}
Datei 2
class PlasmidMapView: NSView, PlasmidMapDelegate {
var dnaForMap = String()
func giveDataForPLasmidMap(dna: String) {
dnaForMap = dna
}
override func drawRect(dirtyRect: NSRect) {
let objectOfMainController = MainController()
objectOfMainController.delegate = self
//here I have checked if the string dnaForMap is passed
let lengthOfString = CGFloat(dnaForMap.characters.count/10)
let pathRect = NSInsetRect(self.bounds, 10, 45)
let path = NSBezierPath(roundedRect: pathRect,
xRadius: 5, yRadius: 5)
path.lineWidth = lengthOfString //the thickness of the line should vary in dependence on the number of typed letter in the NSTextView window - inputDnaFromUser
NSColor.lightGrayColor().setStroke()
path.stroke()
}
}
Eine Sache ist unklar für (Ich bin Anfänger) - "Vergessen Sie nicht, es so einzustellen, wie Sie in ViewDidLoad-Methode oder andere benötigen". Könntest du erklären? – VYT
@VYT müssen Sie das mapView-Objekt initialisieren, zur NSViewController-Ansicht hinzufügen, automatische Layout-Einschränkungen festlegen usw. – Astoria
Endlich !!! Ich habe mit dem, was Sie vorgeschlagen haben, herumgespielt und eine einfache Lösung gefunden. Es ist nicht genau das, was du vorgeschlagen hast, aber du hast mir eine Idee gegeben, und ich gebe dir die Belohnung.Danke noch einmal! – VYT