3 Stimmen

Setzen von Eigenschaftswerten der übergeordneten Viewcontroller-Klasse vom untergeordneten Viewcontroller aus?

Weiß jemand, wie man einen Eigenschaftswert aus der Unteransicht (Kind) Ansicht Controller aktualisieren? Ich habe eine int-Eigenschaft namens statusid mit gettor/settor im übergeordneten View-Controller definiert. [self.view addSubview:detailsVC.view];

In der untergeordneten Teilansicht versuche ich, [super statusid:updatedValue]; aufzurufen, um statusid auf einen neuen Wert zu aktualisieren, aber dies führt zu einem Fehler. Wie kann ich statusid in der übergeordneten Ansicht aktualisieren? Weiß jemand, wie man das macht?

6voto

gabtub Punkte 1450

Mit "super" greifen Sie auf Ihre Basisklasse zu, die Klasse, von der Ihre aktuelle Klasse geerbt hat

um das zu tun, was Sie erklärt haben, müssen Sie auf eine Eigenschaft Ihrer übergeordneten Ansicht zugreifen, was ziemlich kompliziert ist, da dies höchstwahrscheinlich damit endet, dass beide Klassen versuchen, sich gegenseitig zu referenzieren. Daher müssen Sie höchstwahrscheinlich ein Delegatenmuster erstellen, das in etwa so aussieht

ParentView.h

@protocol IAmYourFatherAndMotherProtocol

@class ChildView;

@interface ParentView : UIViewController <IAmYourFatherAndMotherProtocol>
{
NSInteger statusID;
}

@property (nonatomic) NSInteger statusID;

@protocol IAmYourFatherAndMotherProtocol
@property (nonatomic) NSInteger statusID;
@end

@end

in ChildView.h

#import "ParentView.h"

@interface ChildView : UIViewController
{
  id<IAmYourFatherAndMotherProtocol> delegate;
}

@property (nonatomic, assign) id <IAmYourFatherAndMotherProtocol> delegate;

wenn Sie Ihre ChildView in ParentView.m erstellen, müssen Sie "self" als Delegierten festlegen, z. B:

ChildView *newChild = [[ChildView alloc] init];
newChild.delegate = self;

Auf diese Weise können Sie auf die "statusID" Ihrer ParentView in ChildView.m wie folgt zugreifen:

delegate.statusID = 1337;

Ich hoffe, das hilft

0 Stimmen

Nur eine Klarstellung. Was ich versuche zu tun ist, ändern Sie eine Eigenschaft in einer MKAnnotation Ansicht, die eine AnnotationView enthält, die einen Aufruf zu einem UIViewController hat. Ich möchte eine Eigenschaft Wert der MKAnnotation aus dem Aufruf der Viewcontroller ändern.

0 Stimmen

Sie haben also eine MKAnnotationView, die eine (weitere?) (MK?)AnnotationView enthält? Wie auch immer, ich bin ziemlich sicher, dass Sie immer noch haben, um es in ähnlicher Weise zu tun, was ich gepostet habe.

0 Stimmen

Gibt es eine Möglichkeit, dies zu einer Methode zu erweitern? Mit anderen Worten, rufen Sie etwas wie [delegate doSomething:YES];?

0voto

Martin Gordon Punkte 36034

Der Aufruf einer Methode auf Super ruft die Implementierung einer Methode der Superklasse auf, nicht aber die Implementierung des Superviews/Super View Controllers.

Sie müssen entweder einen Verweis auf das übergeordnete Element aus dem Child-View-Controller behalten und die Methode setStatusId: auf dem übergeordneten Element aufrufen oder ein Delegatenmuster zwischen den beiden erstellen, das den Delegaten des untergeordneten Elements (wahrscheinlich auf das übergeordnete Element festgelegt) wissen lässt, dass sich die Status-ID geändert hat.

0 Stimmen

Haben Sie ein Code-Beispiel zu: halten Sie einen Verweis auf das übergeordnete vom Kind View Controller und rufen Sie die setStatusId: Methode auf dem übergeordneten? Und welche Methode ist eleganter: das Delegatenmuster oder die setStatusId-Methode auf dem Elternteil?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X