2017-06-30 2 views
2

Erstens kann ich keinen Code posten, aber ich werde versuchen, mein Problem so gut wie möglich zu beschreiben.Erstellen Sie benutzerdefinierte IBAction in Controller meiner benutzerdefinierten Ansicht

Ok. Ich erstellte eine Custom Swift View Datei als view.xib und lade sie in meine view.swift I geladen Xib. Der Xib ist ein einfacher label über einem imageview. Ich kann meine IBOutlet in meiner view.swift Datei und z. schalte das Bild um oder ändere das Etikett. view.swift erstreckt sich einfach UIView.

Also jetzt habe ich diese Ansicht in meine Storyboard integriert, die einen Controller hat (nennen wir es otherVC.swift). Jetzt will otherVC.swift Info bekommen, dass die view.swift berührt wird. Ich habe versucht, eine IBAction Einstellung, aber es gibt keine Option zu setzen, nur auf IBOutlet. Nach einigen Googe fand ich, dass die Klasse UiControl diese Mechanik hat, um eine IBAction einzustellen.

Also ich view.swift verlängert nicht mehr UIView aber jetzt UIControl. Danach könnte ich ein IBAction mit einem Touch-Event erstellen. (wie Touchdown oder Touch innerhalb) Wenn ich die App mit der Ansicht im Simulator starte, kann ich auf die Ansicht klicken, aber die IBAction wird nicht aufgerufen.

Also meine Frage ist, wie kann ich ein IBAction für meine Ansicht in einem anderen VC oder vielleicht meine eigene IBActions für die spezifische Ansicht.

wieder ..nicht in der Lage, Code zu buchen. würde gerne Snippets oder Links mit Arbeitsbeispiel

Vielen Dank!

+0

Haben Sie versucht, Ihrer benutzerdefinierten Ansicht 'UITapGestureRecognizer' hinzuzufügen? – byJeevan

+0

ja, aber ich möchte den Anruf, dass meine Sicht auf einen anderen VC angezapft wird senden. – Offset

+0

In diesem Fall können Sie jeden Beobachter wie 'Delegates' oder' NSNotificationCenter' verwenden. – byJeevan

Antwort

2

Ich denke, es wird schwer sein, benutzerdefinierte IBAction zu erstellen (wenn nicht unmöglich), aber Ihr Problem hat viele andere Lösungen wie Delegierten, Benachrichtigungen und Schließungen, so empfehle ich, Closers zu verwenden, es ist meiner Meinung nach einfachster Weg . unten ist der Code, wie Sie das mit Schließern tun können

class View { 
    var someButtonTapped: (UIButton) -> Void = {_ in } 

    @IBAction private func someButtonTappedAction(_ sender: UIButton){ 
     someButtonTapped(sender) 
    } 
} 

Und in Ihrem Controller

objectOfYourCustomView.someButtonTapped = {sender in 
//handle action 
} 
0

Was ich verstanden i auf dieser Grundlage bin zu beantworten. Erstellen Sie die öffentliche Eigenschaft Ihrer Ansichten, auf die Sie im Viewcontroller zugreifen möchten. Sie können auf customview zugreifen. Name des Anwesens. Hoffe, das kann helfen.

Verwandte Themen