2015-08-13 10 views
5

Instanzen von UIButton, UITableViewCell usw. können als Schnittstellenquellen in Interface Builder verwendet werden (d. H. Sie können diese Objekte mit einem Ctrl-Klick verbinden und mit Controllern in einem Storyboard verknüpfen).Erstellen einer UIView-Unterklasse, die Segmente auslösen kann

Können wir eine direkte UIView-Unterklasse erstellen, die dieselbe Funktionalität zulässt? Wenn das so ist, wie?

HINWEIS: Hier ist ein anderer Weg, um meine Frage zu stellen: Wie kann ich im Abschnitt "Getriggerte Segues" meiner eigenen Klassen Elemente hinzufügen? Hier ist, was man für eine UITableViewCell sehen:

Triggered Segue

Antwort

3

Wie ich die gleiche Funktionalität wie Jean haben mochte, war ich verwirrt. Disclaimer: Ich bin ein totaler Noob auf iOS und Apple, also nehme ich an, dass es mir und meinem mangelnden Verständnis sein muss, warum es nicht funktioniert.

Diese 'Antwort' ist mehr eine Theorie und vielleicht eine sehr schlechte. Also lass es mich wissen, wenn es schon eine Lösung gibt.

Theorie

Ich glaube nicht, es möglich ist, die ‚Ausgelöst Segues‘ Abschnitt über Code allein zu verlängern/steuern. Es scheint, dass XCode basierend auf dem Steuerelement weiß, das aus der Objektbibliothek ausgewählt wurde, die getriggert werden soll.

enter image description here

Gedanken

Mit nur eine Unterklasse von z.B. UIButton hat mir den Abschnitt "Triggered Segues" im Inspektor "Verbindungen" nicht angezeigt. Auch das Festlegen der Klasse im Abschnitt Benutzerdefinierte Klasse hilft nicht.

enter image description here

Nur wenn ich eine Schaltfläche aus der Objektbibliothek verwenden, erhalte ich die Triggered Segues Abschnitt. Z.B. Wenn ich von UIButton absteige, sollte ich einen 'Button' verwenden.

enter image description here

Ich spielte mit dem XML in meinem Main.storyboard - wenn ich eine <subviews><button ... zu einem <subviews><view ... der Abschnitt ist weg 'Triggered Segues' geändert. Ändere es zurück und es erscheint. Siehe unten. Ich änderte das Element, das das customClass="IconButton"-Attribut enthält, von Schaltfläche zu Ansicht.

Button: Nachdem Triggered Segues

<viewController title="..." id="Zzf-WE-vxI" customClass="MyCustomClass" ... > 
    <view key="view" contentMode="scaleToFill" id="Mfn-O2-CMJ"> 
     <!-- ... --> 
     <subviews> 
      <button customClass="IconButton" customModule="..."> 
       <!-- ... --> 
      </button> 

Blick: Nein Triggered Segues

<viewController title="..." id="Zzf-WE-vxI" customClass="MyCustomClass" ... > 
    <view key="view" contentMode="scaleToFill" id="Mfn-O2-CMJ"> 
     <!-- ... --> 
     <subviews> 
      <view customClass="IconButton" customModule="..."> 
       <!-- ... --> 
      </view> 

Fazit

Meine Schlussfolgerung ist, dass XCode zeigt Triggered Segues Abschnitt basierend auf das Ele ment/Kontrolle in einem Storyboard-XML - es ist nicht abhängig von der Klasse I-Unterklasse von. Daher bezweifle ich, dass es möglich ist, den Inhalt des Abschnitts "Getriggerte Segues" nach Code zu steuern.

Bitte lassen Sie mich wissen, wenn ich falsch liege. Wie gesagt, ich habe momentan keine wirklichen Erfahrungen mit den Interna von XCode und bin gespannt, ob meine Theorie nur bla bla ist.

+0

Ich habe nie darüber nachgedacht, XML unter der Haube zu vergleichen! Sehr interessant, Siebzig. –

+0

Sieht aus, als wäre es irgendwie fest verdrahtet, aber wie gesagt, nur eine Theorie. – seventy2eleven

-1

Ja von View-Controller anzuzeigen Controller eine segue in Storyboard erstellen. Du MUSST diesem Titel eine Kennung geben. Dann lausche auf Berührungen, die mit dieser Ansicht begonnen wurden, und rufe [self performSegueWithIdentifier @ "YOUR IDENTIFER"] auf;

Nein, Sie können nicht direkt eine UIVIEW Aktion haben. Sie können eine Schaltfläche hinzufügen HERE A TASTE

UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)]; 
[view setUserInteractionEnabled:NO]; 
[view setBackgroundColor:[UIColor redColor]]; 

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btn addSubview:view]; 
[btn setFrame:CGRectMake(0, 0, 200, 100)]; 
[btn addTarget:self action:@selector(click)forControlEvents:UIControlEventTouchUpInside]; 

[self.view addSubview:btn]; 

oder fügen Sie tippen Erkennungs

//The setup code (in viewDidLoad in your view controller) 
    UITapGestureRecognizer *singleFingerTap = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
             action:@selector(handleSingleTap:)]; 
[self.view addGestureRecognizer:singleFingerTap]; 

//The event handling method 
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { 
    CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 

//Do stuff here... 
} 
+0

Guter Rat, aber beantwortet meine Frage nicht. Gibt es eine Idee, wie eine UIView-Unterklasse zu einer Sequence-Quelle werden kann? –

+0

Aktualisiert meine Antwort – mKane

+0

UITableViewCell ist jedoch eine Unterklasse von UIView und erlaubt immer noch segues ... Wie kann ich es mit meinen eigenen UIView-Klassen tun? –

0

Sie können Unterklasse das Steuerelement Ansicht anzuzeigen, die für Ihren Zweck besser passt.

Später in Xcode müssen Sie den Namen der Klasse in den rechten Inspektor und wenn es andere Optionen benötigt Schlüssel-Eigenschaften verwenden.

Die Registerkarte, nachdem Sie die UIView ausgewählt haben, wird mit dem Tool 'Identity Inspector anzeigen' angezeigt.

Dann können Sie auf den Bereich Benutzerdefinierte Klasse zugreifen und den Klassennamen auswählen.

Eine anspruchsvollere Funktion wird mit ‚User Defined Runtime-Attribute‘

+0

UITableViewCell ist jedoch eine Unterklasse von UIView und lässt weiterhin Segmente zu ... Wie kann ich dies mit meinen eigenen UIView-Klassen tun? –

+0

Platzieren Sie die Ansicht einfach an dem Ort, den Sie mögen. Dann können Sie im Reiter "Identitätsinspektor anzeigen" im rechten Menü den Klassennamen und Eigenschaften (attributres) für Ihr eigenes Projekt festlegen. –

+0

@KikoAlbiolColomer BTW, "Schweinswal" ist ein männlicher Delphin. Und "Schweinswale" bedeutet "sich bewegen wie ein Delphin" –

Verwandte Themen