Ich habe ein actionSheet mit 3 Optionen erstellt, die an andere View-Controller übertragen und eine Nummer anrufen. Diese Option befindet sich auf einer Schaltfläche in einer Navigationsleiste auf jedem Bildschirm meiner App. Ich versuche einen Weg zu finden, den Code wiederzuverwenden, ohne ihn für jeden Bildschirm neu eingeben zu müssen. Ich verstehe, dass es einen Weg gibt, dies zu tun, indem ich eine UIButton
Unterklassenbildung abschneide, aber ich habe Tage gesucht und kann keine definitive Antwort finden, wie man die Unterklasse tatsächlich kodiert. Mein Code jetzt ist die folgende:Wiederverwendbare * Taste * in Xcode
class moreButton: UIButton {
@IBAction func displayActionSheet(_ sender: Any) {
let alertController = UIAlertController(title: nil, message: "Get Your Roast On", preferredStyle: .actionSheet)
let followAction = UIAlertAction(title: "Follow Us", style: .default, handler: {(action: UIAlertAction!)->Void in self.performSegue(withIdentifier: "moveSegue", sender: self)
})
let shopAction = UIAlertAction(title: "Visit Shop", style: .default, handler: {(action: UIAlertAction!)->Void in self.performSegue(withIdentifier: "shopSegue", sender: self)
})
let callAction = UIAlertAction(title: "Call Us Now", style: .default) { _ in
let url:URL = URL(string: "tel://number")!
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alertController.addAction(followAction)
alertController.addAction(shopAction)
alertController.addAction(callAction)
alertController.addAction(cancel)
self.present(alertController, animated: true, completion: nil)
}
}
ich den Fehler bekommen:
value of type 'moreButton' has no member 'performSegue'
in beide followAction und shopAction Linien und „Wert vom Typ‚moreButton‘Nein‚anwesend‘Mitglied hat "In der letzten Zeile. Dieser Code funktionierte, als ich eine IBAction
direkt von der Schaltfläche erstellt hatte, aber jetzt scheint es Fehler zu haben, von denen ich nicht weiß, wie ich sie korrigieren soll.
Sie versuchen, einen Knopf zu machen funktionieren, das ist eigentlich das Geschäft eines View-Controllers. View-Controller können Segmente ausführen und andere Controller darstellen, aber Schaltflächen können nicht, daher hat das "Selbst" keine Ahnung, wonach Sie fragen. Erwägen Sie, diesen Code in eine Unterklasse von 'UIViewController' zu setzen und dann alle anderen" Bildschirme "von dieser VC zu erben. –
Das ist wirklich hilfreich zu wissen. Ich nahm nur an, dass es mit einer IBAction von einem Button funktionierte, dass es funktionieren würde, wenn ich einen Button subklassenlasse. Ich komme jetzt in ein paar Probleme aus dem untenstehenden Code, aber ich werde sehen, ob es funktioniert – Sprokalero
Die Idee ist, dass eine IBAction ist etwas, das der Knopf in seinem Namen geschieht, nicht etwas, was der Button für sich selbst geschieht. –