2009-08-11 10 views
0

Ich bin derzeit auf einer App mit dieser Struktur arbeiten:iphone UITextView manuell registerring berührt

Ich habe einen View-Controller, die wir Mainviewcontroller nennen, die alle Touch-Ereignisse für die Anwendung verarbeitet. MainViewController hat als Instanzvariable eine Ansicht namens canvasView. canvasView hat als UITextView hiddenTextView.

Theres andere unsichtbare Ansichten und so UITextView ist nicht der erste, um Berührungen zu registrieren.

Wie bekomme ich die UITextView um Berührungen in dieser Konfiguration zu registrieren? Speziell, um eine Auswahl aus der AutoCorection-Box zu treffen (Eigentlich ist es für die japanische Kanji-Auswahl, aber ich nehme an, es ist ein ähnlicher Mechanismus).

Ich habe versucht:

[canvasView.hiddenTextView touchesBegan: berührt Withevent: event]

aus der touchesBegan Methode des Mainviewcontroller. Ich habe dies für Berührungen getan, Began, bewegt und Beendet.

Ich denke, es funktionierte tatsächlich für einen der 50 oder so läuft ich habe versucht, aber ich weiß nicht, was sich geändert hat.

Alle Ideen, wie ich diese Arbeit zu bekommen?

Antwort

0
[canvasView.hiddenTextView becomeFirstResponder]; 

wird wahrscheinlich tun, was Sie wollen.

Die Responder-Kette auf dem iPhone ist eine etwas trickreiche Sache. Ich finde es in der Regel einfacher, überlappende Steuerelemente zu vermeiden, so dass es bei jedem gegebenen Fall völlig eindeutig ist, welche Steuerung welche Eingaben erhalten soll.

Wenn Sie viele Steuerelemente überlappen und häufig zwischen den Steuerelementen hin- und herschalten, ist das ein gutes Zeichen dafür, dass Sie nur weitere Unterklassen von UIViewController implementieren und zwischen diesen wechseln möchten, anstatt sie auszuwechseln und die Kontrollen. Eine weitere Option besteht darin, benutzerdefinierte Unterklassen von UIView zu erstellen und diese stattdessen hin- und herzuwechseln - womit ich eigentlich den alten aus der Unteransicht entferne (nicht verstecke) und den neuen hinzufüge.

Natürlich gibt es einige Zeiten, in denen das Verbergen/Anzeigen viel einfacher ist als das Unterklassifizieren.

Ich hoffe, dass hilft. Referenz: Apple's UIResponder docs. (Beachten Sie, dass UIViewController oder UIView ist eine Unterklasse von UIResponder.)

+0

Die UITextView ist bereits der erste Responder an diesem Punkt, obwohl die Tastatur und alles ist. Ich versuchte es sowieso, aber immer noch nichts :(. Ich habe versucht, mit [[self nextResponder] touchesBegan .....] auch, die für mich in anderen Fällen der Weitergabe von Aufträgen zu anderen Schichten gearbeitet hat, aber diesmal nicht – kiyoshi

+0

Eine andere Idee: Überprüfen Sie den Rahmen Ihres UITextView und seine Superviews. Ich hatte einen Fall, wo meine Kontrolle klar sichtbar war, aber keine Berührungen bekam. Das Problem stellte sich heraus, dass sein Rahmen Größe (0,0) hatte Es sieht so aus, als ob die Antwortenden keine Berührungen bekommen, es sei denn, die Berührungen sind in ihrem Rahmen. – Tyler

+1

Hey Tyler, danke für deine Antworten. Am Ende habe ich einfach alle hiddenTextView-Sachen auf den Top-View-Controller verschoben und sichergestellt, dass die hiddenTextView die war vorderste Unteransicht.Dann kümmerte sich das UIResponder-Zeug selbst, und nachdem es zum ersten Responder wurde, war keine weitere Touch-Weiterleitung erforderlich. Ich wünschte, die UIKit-API wäre ein wenig transparenter, obwohl :( – kiyoshi

Verwandte Themen