2012-04-11 7 views
1

In meiner iPhone App habe ich zwei UIViewcontroler Klasse FirstView und SecondView.Hide Button in einer anderen Ansicht von Modal View

Von der FirstView, präsentiere ich secondView mit presentModalViewController:animated: Methode.

Problem ist, dass, wenn ich SecondView entlasse, ich Schaltfläche in FirstView ausblenden möchte.

Obwohl es den Code in FirstView [button setHidden:YES]; ausführt, aber es noch nicht die Schaltfläche versteckt.

Was könnte falsch sein?

Jede Hilfe wäre willkommen.

+0

Wie wäre es, Protokoll zu implementieren? –

+0

verstecken Sie Knopf von secondview in discussModelView Methode? – mithilesh

+0

Ich versuchte mit Protokoll, aber es hat nicht funktioniert. – ios

Antwort

2

Ich hoffe, Sie haben die Eigenschaft deklariert und das IBOutlet button synthetisiert.

Erstellen Sie ein Objekt von FirstViewController in SecondViewController.h und Eigenschaft und synthetisieren Sie es.

SecondViewController.h

@interface SecondViewController { 
. 
. 
FirstViewController *firstView; 
. 
. 
} 
@property (nonatomic,strong) FirstViewController *firstView; 

@end 

SecondViewController.m

@implementation SecondViewController 
. 
. 
@synthesize firstView; 
. 
. 
@end 

Nun, wenn Sie präsentieren eine modale Ansicht von Firstview

FirstViewController.m

-(IBAction)presentModalView { 
    SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    secondView.firstView = self; 
    [self presentModalViewController:secondView animated:YES]; 
} 

Jetzt in SecondViewController, wo Sie SecondViewController entlassen nur diesen Code hinzufügen.

SecondViewController.m

-(IBAction)dismissModalView { 
    [self.firstView.button setHidden:YES]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

EDIT:

zu diesem Link finden:

@protocol implementation in @interface in Objective-C

EDIT-2: Mit Protokollimplementierung

SecondViewController.h

@protocol SecondViewControllerDelegate <NSObject> 
@required 
    - (void)hideButton; 
@end 

@interface SecondViewController { 
. 
. 
id <SecondViewControllerDelegate> delegate; 
. 
. 
} 
@property (retain) id delegate; 

@end 

SecondViewController.m

@implementation SecondViewController 
. 
. 
@synthesize delegate; 
. 
. 
@end 

Nun, wenn Sie präsentieren eine modale Ansicht von Firstview

FirstViewController.h

#import <UIKit/UIKit.h> 

@interface FirstViewController : UIViewController<SecondViewControllerDelegate> 
{ 
. 
. 
. 
. 
} 
. 
. 
@end 

FirstViewController.m

-(IBAction)presentModalView { 
    SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    secondView.delegate = self; 
    [self presentModalViewController:secondView animated:YES]; 
} 

#pragma mark - SecondViewController Delegate 

- (void)hideButton 
    { 
     [self.button setHidden:YES]; //Here button is UIButton you want to hide when second view is dismissed. 
    } 

Jetzt in SecondViewController, wo Sie SecondViewController entlassen, fügen Sie einfach diesen Code hinzu.

SecondViewController.m

-(IBAction)dismissModalView { 
    [delegate hideButton]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Lassen Sie mich wissen, wenn Sie auf diese weitere Hilfe benötigen.

Hoffe, das hilft.

+0

Danke für die Antwort, aber ich versuche, mit Protokoll zu implementieren können Sie mir dafür – ios

+0

@Prerak: Auch meine Antwort hier ist sehr ähnlich Protokollumsetzung abgesehen von der Tatsache, dass es keine '@ Protokoll' Deklaration für die Delegiertenmethode gibt. –

0

Ich würde die Schaltfläche auf der ViewDidDissapear-Methode ausblenden, wenn der Benutzer das Modell also die Schaltfläche blendet. Dies funktioniert jedoch nur, wenn Sie andere viewControllers nicht von Ihrem firstViewController aus anzeigen können.

Ich hoffe es hilft !!

0

Ich habe zwei Controller, FirstViewController und SecondViewController erstellt. Und eine Taste in jedem Controller.

FirstViewController.h

#import <UIKit/UIKit.h> 
@interface FirstViewController : UIViewController{ 
    BOOL firstTime;// to hide button 
} 
@property (retain, nonatomic) IBOutlet UIButton *myButton; 
- (IBAction)buttonClicked:(id)sender; 
@end 

FirstViewController.m

-(void)viewWillAppear:(BOOL)animated{ 
    if (firstTime) { 
    [myButton setHidden:TRUE]; 
    } 
} 
- (IBAction)buttonClicked:(id)sender { 
    firstTime = TRUE; 
    SecondViewController *secondController = [[SecondViewController alloc]init]; 
    [self presentModalViewController:secondController animated:TRUE]; 
    [secondController release]; 
} 

SecondViewController.h

@interface SecondViewController : UIViewController 
@property (retain, nonatomic) IBOutlet UIButton *secondButton; 
- (IBAction)secondButtonClicked:(id)sender; 
- (IBAction)secondButtonClicked:(id)sender; 
@end 

SecondViewController.m

- (IBAction)secondButtonClicked:(id)sender { 
    [self dismissModalViewControllerAnimated:TRUE]; 
} 

Das ist für mich gearbeitet. Bitte probiere es aus.

+0

Dies ist eine Arbeit und kein Standard, um die Logik zu erarbeiten. Der Standardweg besteht darin, entweder das Objekt wie ich oder die Protokollimplementierung zu verwenden. Es scheint, dass Sie ein frischeres iPhone sind. –

+0

Warum willst du ein Protokoll für so ein einfaches Zeug verwenden? Sie rufen den SecondViewController von FirstViewController auf, oder? Um den Zugriff auf die Schaltfläche in SecondViewController zu erhalten, können Sie es aus dem übergeordneten Controller von SecondViewController, die FirstViewController ist abrufen. – mChopsey

Verwandte Themen