2015-08-13 16 views
5

Wystąpienia UIButton, UITableViewCell, itp. Mogą być używane jako źródła segu w Generatorze interfejsów (tzn. Można kliknąć te obiekty i połączyć je z kontrolerami w storyboardie).Tworzenie podklasy UIView, która może wyzwalać sepy

Czy możemy stworzyć bezpośrednią podklasę UIView, która pozwala na tę samą funkcjonalność? Jeśli tak to jak?

UWAGA: Oto kolejny sposób zadawania mojego pytania: w jaki sposób mogę dodać elementy w sekcji "Segmenty wyzwalane" w moich własnych klasach? Oto, co można zobaczyć na UITableViewCell:

Triggered Segue

Odpowiedz

3

Jak Lubiłem mieć taką samą funkcjonalność jak Jean, byłem zaskoczony. Zastrzeżenie: Jestem totalnym noobem na iOS i Apple, więc zakładam, że to musi być ja i mój brak zrozumienia, dlaczego to nie działa.

Ta "odpowiedź" jest raczej teorią, a może bardzo złą. Więc proszę daj mi znać, jeśli "istnieje już rozwiązanie.

Teoria

Nie sądzę, że jest możliwe, aby rozszerzyć/kontrolować sekcję „wyzwalane segues” przez sam kod. Wygląda na to, że XCode wie, w oparciu o formant wybrany z Biblioteki obiektów, który wyświetlają Wyzwalane Segmenty.

enter image description here

myśli

mającymi tylko podklasy np UIButton nie dostarczył mi Sekcji Wyzwalanych Segmentów w Inspektorze Połączeń. Ustawienie klasy w sekcji klasy niestandardowej również nie pomaga.

enter image description here

Dopiero kiedy użyć przycisku z biblioteki obiektów, mam uruchomionych segues rozdział. Na przykład. jeśli mam podklasę z Uibutton, powinienem użyć "przycisku".

enter image description here

Grałem około z XML w moim Main.storyboard - ilekroć zmienił <subviews><button ... do <subviews><view ... sekcja „wyzwalane segues” znika. Zmień go z powrotem i pojawi się. Zobacz poniżej. Zmieniłem element, który zawiera atrybut customClass="IconButton" z przycisku, aby wyświetlić.

Przycisk: Po wyzwalane segues

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

Zobacz: NIE Wyzwalanie segues

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

Wnioski

Moja konkluzja jest taka, że ​​XCode znajdują wyzwalane sekcja segues na podstawie ele ment/control w pliku XML scenorysu - nie jest zależny od podklasy klasy I. Wątpię więc, by można było kontrolować zawartość sekcji Segmenty wyzwalane za pomocą kodu.

Proszę dać mi znać, jeśli się mylę. Jak powiedziałem, nie mam prawdziwego doświadczenia z wewnętrznymi kodami XCode już teraz i jestem ciekawa, czy moja teoria jest po prostu blah.

+0

Nigdy nie myślałem o porównaniu XML pod maską! Bardzo interesujące, Siedemdziesiątych. –

+0

Wygląda na to, że jest w jakiś sposób hardwired, ale jak powiedział, tylko teoria. – seventy2eleven

-1

Tak z widoku kontrolera aby stworzyć kontroler segue w serii ujęć. MUSISZ nadać temu identyfikatorowi identyfikator. Następnie zacznij słuchać, czy w tym widoku rozpoczęły się dotknięcia i wywołaj [self performSegueWithIdentifier @ "TWÓJ IDENTIFER"];

Nie można bezpośrednio spowodować, że UIVIEW będzie działał. Można dodać przycisk TUTAJ dodać przycisk do WIDOK

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]; 

lub dodać kranu rozpoznawania aby

//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

Dobra rada, ale nie odpowiada na moje pytanie. Każdy pomysł, jak zezwolić na podklasę UIView, aby stać się źródłem segue? –

+0

Zaktualizowana moja odpowiedź – mKane

+0

Jednak UITableViewCell jest podklasą UIView i nadal pozwala na segues ... Jak mogę to zrobić z własnymi klasami UIView? –

0

można podklasy kontroli, która pasuje lepiej do swojego celu.

Później w Xcode należy umieścić nazwę klasy we właściwym inspektorze i jeśli potrzebuje innych opcji, należy użyć właściwości klucza.

Zakładka po wybraniu UIView jest opatrzona podpowiedzią "Pokaż inspektora tożsamości".

Następnie można przejść do obszaru Klasy niestandardowej i można wybrać nazwę klasy.

Bardziej wyrafinowane cechą jest użycie „User Defined Runtime Atrybuty”

+0

Jednak UITableViewCell jest podklasą UIView i nadal pozwala na segues ... Jak mogę to zrobić z własnymi klasami UIView? –

+0

Po prostu umieść widok w miejscu, które lubisz. Następnie w zakładce "Pokaż inspektora tożsamości" w prawym menu możesz ustawić nazwę klasy i właściwości (attributres) dla własnego projektu –

+0

@KikoAlbiolColomer BTW, "morświn" to męski delfin. A "morświn" oznacza "poruszanie się jak delfin" –