2017-04-30 5 views
0

Meine Frage ist dies: Ist dieser Ansatz, einen UILabel-Tap in der Swift 3-Sprache stilistisch akzeptabel zu machen? Ich bin versucht zu sagen, "wenn es kompiliert, fliegt", aber ich möchte nicht die Angewohnheit nutzen, diesen "Abkürzung" zu verwenden, wenn es mich später beißen wird. Außerdem, wenn es akzeptabel ist, gibt es einige Nachteile bei der Verwendung dieser Methode, die für einen Neuling wie mich nicht offensichtlich sind?Ist es Sprache angemessen, eine UIButton über ein UILabel in Swift 3.0 zu schichten?

Bitte beachten Sie, dass ich nicht nach einer Möglichkeit suche Code zu implementieren, habe ich einen. Ich frage, ob die Lösung, die ich habe, aus Sicht des Sprachstils akzeptabel ist.


Ich habe eine UILabel zu bekommen versucht, eine TapGesture zu akzeptieren, wenn in einer Tabellenzelle für 2 Tage jetzt und was auch immer Methode, die ich versuchen, es noch immer eine Art von Fehler ist, wenn es kompiliert wird. Kurz und gut, ich ging zu meinem Storyboard für die Tischansicht und fügte einen Knopf oben (nicht gestapelt oder ausgerichtet oder etwas ähnliches - tatsächlich besetzt den gleichen 2D Raum auf dem Storyboard) innerhalb der Prototypzelle hinzu. Ich löschte den Schaltflächentext, verknüpfte ihn mit dem Zellencode der Tabellenansicht und implementierte einige grundlegende Funktionen, um den Text auf dem UILabel in Rot und zurück zu ändern. All das funktioniert genau so, wie ich es erwartet habe. Ich klicke auf die Schaltfläche und der Text ändert sich von Schwarz zu Rot und zurück, wenn erneut geklickt wird. Der UILabel-Text ist in der Tabellenzelle auf einem weißen Hintergrund statisch und meine eigentliche Funktion wird den Text nicht ändern, sondern eine andere Ansicht durch Delegation von dieser Ansicht ändern.

Warum so? Selbst wenn ich die UILabel-Interaktions-Box ankreuze und einige der anderen Fragen und Antworten hier bearbeite, um sie anpassungsfähig zu machen, kann ich das UILabel nicht steuern und in die Tabellenansichtszelle ziehen und eine Aktion ausführen, die Option existiert einfach nicht im Pulldown-Menü. Es ist verfügbar, wenn ich das UILabel mit der Maus steuern und auf den Tabellenansicht-Controller ziehen kann. Das macht für mich Sinn, weil es der Tabellenansicht-Controller ist, der die Berührung wahrnimmt (richtig?). Aber andererseits habe ich einen Schalter in der Tabellenansichtszelle, die gut funktioniert, wenn ich der Antwort auf this question folge. Die einfache Funktionalität der Storyboard-Code-Interaktion (Steuerung + Ziehen) verhindert, dass ich bekomme, was ich will. Vielleicht sollte control + drag erlauben, dass ich eine Aktion mache und nicht? Ich weiß es nicht. Ich möchte kein UIButton alleine verwenden, weil die Text-Skalierungsfunktion von UILabel wirklich praktisch ist.

+0

Blick in Open-Source-Subklassen von UILabel, die Link-Erkennung und Interaktion mit dem Benutzer zu unterstützen, wie beispielsweise [TTTAttributedLabel] (https://github.com/TTTAttributedLabel/TTTAttributedLabel), [ZSWTappableLabel] (https://github.com/zacwest/ZSWTappableLabel), usw. – n00bProgrammer

+2

Was hat Ihre Frage mit Swift 3 zu tun? Es ist das gleiche, ob Sie Swift 2, Swift 3, Objective-C oder eine andere Sprache verwenden. – rmaddy

+0

@rmaddy Ich versuche, spezifisch zu sein, was ich tue. Ihre Behauptung, dass der Sprachstil in allen Sprachen gleich ist, trifft überhaupt nicht zu. Sonst könnte ich Python-Listenverständnis in Swift verwenden. Ihre Frage ist die Antwort, dass solange es kompiliert, es in Ordnung ist. –

Antwort

0

Wenn Sie nur Hähne auf die Tabellenzelle erkannt werden sollen, machen die Klasse, um die Delegierten der Tabellenansicht

tableView.delegate = self 

und implementieren

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     //your code here 
    } 

ich auch würde schätzen nehmen Sie sich die Zeit um etwas mehr über UITableViews zu lesen. Jede UITableViewCell hat ein eigenes Label. Man betrachte den folgenden Code:

tableView.dataSource = self // this code will ideally be in init 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "lovCell") 
     cell.textLabel?.text = dummyData[indexPath.row] 
     return cell 
    } 
Verwandte Themen