2017-06-13 1 views
0

Ich denke, dies ist ein Anfänger Frage ist, so vielen Dank für Ihre Geduld:minimiert Erstellung von Instanzen von UIViewController

In viewControllerA, ich habe eine Menge von Methoden aus viewControllerB nennen.

Derzeit bin ich mit

viewcontrollerB * vcB= [[viewcontrollerB alloc] init]; 
[vcB doSomething]; 

ich das immer und immer wieder in meinem ViewControllerA, und das fühlt sich dumm.

Was wäre hier der beste Ansatz?

Kann ich ViewControllerB eine Eigenschaft von ViewControllerA machen? Sollte ich Delegate-Methoden verwenden, und wenn ja, wie?

Wir freuen uns auf Ihre Erkenntnisse

+0

ja Sie können Eigenschaft und delegieren, wenn Sie Daten an viewcontroller A weitergeben möchten. – KKRocks

+1

Hinweis: Klassennamen sollten Camel Case sein, viewcontrollerB sollte ViewControllerB sein, nur für bessere Lesbarkeit des Codes. – TawaNicolas

+1

Ich denke, das ist eher wie eine meinungsbasierte Frage. Wenn VC-A der Elternteil von VC-B ist, wird VC-A in der Regel eine Instanz von VC-B haben und kann die Funktionen direkt aufrufen. VC-B sollte einen Delegierten haben. –

Antwort

0

Nun, könnte es tatsächlich einige Fragen im Zusammenhang mit Ihrem Design-Ansatz in Zusammenhang stehen. Während Sie nicht angegeben haben, was die tatsächliche Beziehung zwischen diesen zwei View-Controllern ist, aber selbst in dieser Situation würde ich sagen, ja, Sie können Ihren zweiten View-Controller als eine Eigenschaft des ersten haben. Wenn Sie besser beschrieben hätten, welche Art von Aktionen Sie ausführen und welche Beziehung zwischen diesen beiden View-Controllern besteht, können Sie eine detailliertere und erweiterte Antwort erwarten. Scheint, dass Ihr zweiter View-Controller tatsächlich nicht auf dem Bildschirm angezeigt wird und Sie nur einige seiner Geschäftsmethoden wiederverwenden. So sollte es nicht sein. Sie sollten diese Methoden in einigen anderen Klassen entkoppeln, die dieses bestimmte gemeinsame Geschäftsverhalten einkapseln.

Ich würde auch vorschlagen, Sie mit MVVM Design Rüttler anerkannt zu bekommen, die diese und mehrere andere Art von Fragen löst: https://www.objc.io/issues/13-architecture/mvvm/

0

Sie delegieren können.

In ViewControllerB.h:

@protocol ViewControllerBDelegate <NSObject> 

-(void)doSomething; 

@end 


@interface ViewControllerB : UIViewController 

@property (nonatomic, weak) id <ViewControllerBDelegate> delegate; 

@end 

In ViewControllerB.m

-(void)someMethod { 
    if ([self.delegate respondsToSelector:@selector(doSomething)]) { 
      [self.delegate doSomething]; // will call delegate implement in delegate object. 
     } 
} 

In ViewControllerA:

ViewControllerB *vcB = [[ViewControllerB alloc] init]; 
vcB.delegate = self; 

#pragma mark - ViewControllerBDelegate 
-(void)doSomething { 
    //... 
} 

Sie sollten [self.delegate doSomething] in ViewControllerB anrufen, wenn Sie etwas wollen, in ViewControllerA tun ;

Verwandte Themen