2016-03-19 3 views
0

Ich habe ein horizontales Scrollview mit aktivierter Paginierung, so dass jede Seite eine eindeutige Xib-Ansicht zeigt. Einige Xib-Ansichten haben Schaltflächen, die mit IBAction verknüpft sind. Ich erkläre die IBAction in jeder XIB-Klasse. Alles scheint und sieht gut aus Die Buttons zeigen Klickeffekte und alles, aber die IBAction wird nicht gefeuert? Hier ist ein Codebeispiel:UIViews Schaltflächen in einem Scrollview, die IBAction nicht auslösen

let clockView: ClockViewController = ClockViewController(nibName: "ClockViewController", bundle: nil) 

    let carView: CarViewController = CarViewController(nibName: "CarViewController", bundle: nil) 

    scrollview.addSubview(clockView.view) 

    carView.view.frame.origin.x = self.view.frame.width 

    scrollview.addSubview(carView.view) 

clockView und Carview haben beide Tasten in ihnen und auch die Tasten zu IBActions in ClockViewController.swift und CarViewController.swift jeweils erklärt verknüpft.

Hier sehen Sie, wie eine der Ansichten aussieht. Ich füge UIViewController nicht in der Xib hinzu, ich benutze nur eine UIView. Ich vermute, das könnte Teil des Problems sein, aber ich kann UIViewController nicht als Unteransicht verwenden, weil es einen Fehler gab. enter image description here

enter image description here

enter image description here Jede Hilfe sehr geschätzt wird, scheint

+0

Was ist 'filesOwner'? – Paulw11

+0

der FileOwner ist die gleiche XIB-Klasse, und ich habe die Frage aktualisiert, um das zu zeigen, danke. – fullMoon

+0

Ich denke, Ihr Problem ist, dass Sie 'CarView' in eine lokale Variable einfügen, so dass es freigegeben wird, wenn die e-Funktion beendet wird. Versuchen Sie, es in eine Instanzvariable/Eigenschaft zu setzen – Paulw11

Antwort

1

Das Problem ist, dass Sie carView als lokale Variable deklarieren, so wird es, sobald die Funktion beendet wird freigegeben werden, da gibt es nichts eine starke Referenz halten. Die View-Elemente selbst werden von der Scrollview referenziert, so dass sie nicht freigegeben werden, aber es wird keine View-Controller-Instanz mehr geben, um die Events zu verarbeiten.

Wenn Sie carView und clockView als Eigenschaften ändern, wird eine starke Referenz erstellt.

0

Das Problem, dass Sie innerhalb Viewcontrollers Viewcontrollers verwenden. Wenn Sie dies über das Storyboard tun möchten, müssen Sie eine containerView verwenden und den ViewController innerhalb dieser containerView platzieren, indem Sie das eingebettete Segment verwenden.

Wenn Sie dies programmgesteuert ausführen möchten, müssen Sie dem übergeordneten Viewcontroller untergeordnete Viewcontrollers hinzufügen, die diese untergeordneten View-Controller enthalten, die carView und clockView sind.

P.S. es ist ein bisschen verwirrend, dass Sie die Ansicht Controller carView anrufen, vielleicht CarViewController weniger verwirrend ist :)

+0

Vielen Dank, Entschuldigung für die Verwirrung. Du hast Recht, ich kann UIViewController nicht in einem anderen UIViewController verwenden und es gab mir einen Fehler, also verwende ich nicht UIViewController in der Xib, ich benutze nur UIView. – fullMoon

Verwandte Themen