Szukaj…


Uwagi

Protokoły i delegaci to dwie powiązane, ale różne koncepcje:

Protokół jest interfejsem, z którym klasa może się zgadzać, co oznacza, że klasa implementuje wymienione metody.

Delegat to zazwyczaj obiekt anonimowy zgodny z protokołem.

Aplikacja Delegata o nazwie Delegacja jest wzorcem projektowym.

Z jednej strony mamy koncepcję Dziedziczenia, która tworzy ścisłe powiązanie między podklasą i jej nadklasą, podczas gdy wzorzec projektowy Delegacji stanowi alternatywę pozwalającą uniknąć tego ścisłego powiązania, dzięki której możemy stworzyć znacznie luźniejszą relację w oparciu o anonimowe obiekty Delegata .

Wdrożenie protokołów i mechanizmu delegacji.

Załóżmy, że masz dwa widoki ViewA i ViewB

Instancja ViewB jest tworzona wewnątrz ViewA , więc ViewA może wysłać wiadomość do instancji ViewB's , ale aby stało się odwrotnie, musimy zaimplementować delegację (aby użycie delegacji instancji ViewB's mogło wysłać wiadomość do ViewA )

Wykonaj poniższe kroki, aby wdrożyć przekazanie uprawnień

  1. W ViewB utwórz protokół jako

     @protocol ViewBDelegate 
    
    -(void) exampleDelegateMethod;
    
     @end
    
  2. Zadeklaruj delegata w klasie nadawcy

     @interface ViewB : UIView
     @property (nonatomic, weak) id< ViewBDelegate > delegate;
     @end
    
  3. Zaakceptuj protokół w widoku klasy A.

    @interfac ViewA: UIView < ViewBDelegate >

  4. Ustaw delegata

    -(void) anyFunction   
    {
        // create Class ViewB's instance and set the delegate
        [viewB setDelegate:self];
    }
    
  5. Zaimplementuj metodę delegowania w klasie ViewA

    -(void) exampleDelegateMethod
    {
        // will be called by Class ViewB's instance
    }
    
  6. Użyj metody z klasy ViewB aby wywołać metodę delegowaną jako

    -(void) callDelegateMethod
    {
        [delegate exampleDelegateMethod];
        //assuming the delegate is assigned otherwise error
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow