2010-03-11 8 views
0

Salut les gars. Je crée donc des boutons dynamiquement dans loadView. Chacun de ces boutons reçoit une action utilisant la méthode @Selector, telle que:Comment puis-je changer 'self.view' dans une méthode de bouton créé en dehors de 'loadView'

[bouton addTarget: action de soi: @selector (showCCView) forControlEvents: UIControlEventTouchUpInside];

Maintenant que la méthode showCCView est définie en dehors de loadView, où se trouve cette instruction ci-dessus. Le point de la méthode est de changer la vue actuellement sur l'écran (donc définissez self.view = ccView). Il me donne une erreur chaque fois que j'essaie d'accéder à self.view en dehors de loadView, et même parfois quand j'essaye d'y accéder à des endroits aléatoires dans loadView, ça a juste agi vraiment bizarrement.

J'ai essayé de changer autour de moi donc je n'aurais pas à faire face à cela non plus. J'avais fait une fonction + (void) showView: (UIView *) oldView: (UIView *) newView; mais cela n'a pas fonctionné non plus parce que le @Selector était vraiment rude de l'utiliser avec une fonction qui avait besoin de deux paramètres.

Une aide s'il vous plaît?

Voici mon code:

// 
// SiteOneController.m 
// InstantNavigator 
// 
// Created by dni on 2/22/10. 
// Copyright 2010 __MyCompanyName__. All rights reserved. 
// 

#import "SiteOneController.h" 


@implementation SiteOneController 

+ (UIView*) ccContent { 

    UIView *ccContent = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

    ccContent.backgroundColor = [UIColor whiteColor]; 

    [ccContent addSubview:[SiteOneController myNavBar1:@"Constitution Center Content"]]; 
    return ccContent; 
} 

// Button Dimensions 
int a = 62; 
int b = 80; 
int c = 200; 
int d = 30; 

// NPSIN Green Color 
+ (UIColor*)myColor1 { 
    return [UIColor colorWithRed:0.0f/255.0f green:76.0f/255.0f blue:29.0f/255.0f alpha:1.0f]; 
} 

// Creates Nav Bar with default Green at top of screen with given String as title 
+ (UINavigationBar*)myNavBar1: (NSString*)input { 

    UIView *test = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, test.bounds.size.width, 45)]; 
    navBar.tintColor = [SiteOneController myColor1]; 

    UINavigationItem *navItem; 
    navItem = [UINavigationItem alloc]; 
    navItem.title = input; 
    [navBar pushNavigationItem:navItem animated:false]; 

    return navBar; 
} 


//-------------------------------------------------------------------------------------------// 
//-------------------------------------------------------------------------------------------// 
//-------------------------------------------------------------------------------------------// 


// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView { 

    //hard coded array of content for each site 

    // CC 
    NSMutableArray *allccContent = [[NSMutableArray alloc] init]; 

    NSString *cc1 = @"House Model"; 
    NSString *cc2 = @"James Dexter History"; 

    [allccContent addObject: cc1]; 
    [cc1 release]; 

    [allccContent addObject: cc2]; 
    [cc2 release]; 

    // FC 
    NSMutableArray *allfcContent = [[NSMutableArray alloc] init]; 

    NSString *fc1 = @"Ghost House"; 
    NSString *fc2 = @"Franklins Letters"; 
    NSString *fc3 = @"Franklins Business"; 

    [allfcContent addObject: fc1]; 
    [fc1 release]; 

    [allfcContent addObject: fc2]; 
    [fc2 release]; 

    [allfcContent addObject: fc3]; 
    [fc3 release]; 

    // PC 
    NSMutableArray *allphContent = [[NSMutableArray alloc] init]; 

    NSString *ph1 = @"Changing Occupancy"; 
    NSString *ph2 = @"Sketches"; 
    NSString *ph3 = @"Servant House"; 
    NSString *ph4 = @"Monument"; 
    NSString *ph5 = @"Virtual Model"; 

    [allphContent addObject: ph1]; 
    [ph1 release]; 

    [allphContent addObject: ph2]; 
    [ph2 release]; 

    [allphContent addObject: ph3]; 
    [ph3 release]; 

    [allphContent addObject: ph4]; 
    [ph4 release]; 

    [allphContent addObject: ph5]; 
    [ph5 release]; 

    // Each content page's view 

    //UIView *ccContent = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    UIView *fcContent = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    UIView *phContent = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

    //ccContent.backgroundColor = [UIColor whiteColor]; 
    fcContent.backgroundColor = [UIColor whiteColor]; 
    phContent.backgroundColor = [UIColor whiteColor]; 

    //[ccContent addSubview:[SiteOneController myNavBar1:@"Constitution Center Content"]]; 
    [fcContent addSubview:[SiteOneController myNavBar1:@"Franklin Court Content"]]; 
    [phContent addSubview:[SiteOneController myNavBar1:@"Presidents House Content"]]; 

    //allocate the view 
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

    //set the view's background color 
    self.view.backgroundColor = [UIColor whiteColor]; 

    [self.view addSubview:[SiteOneController myNavBar1:@"Sites"]]; 

    NSMutableArray *sites = [[NSMutableArray alloc] init]; 

    NSString *one = @"Constution Center"; 
    NSString *two = @"Franklin Court"; 
    NSString *three = @"Presidents House"; 

    [sites addObject: one]; 
    [one release]; 

    [sites addObject: two]; 
    [two release]; 

    [sites addObject: three]; 
    [three release]; 

    NSString *ccName = @"Constitution Center"; 
    NSString *fcName = @"Franklin Court"; 

    NSString *element; 
    int j = 0; 
    for (element in sites) 
    { 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

     //setframe (where on screen) 
     //separation is 15px past the width (45-30) 
     button.frame = CGRectMake(a, b + (j*45), c, d); 

     [button setTitle:element forState:UIControlStateNormal]; 

     button.backgroundColor = [SiteOneController myColor1]; 

     /*- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second { 
      NSLog(@"Logs %@ then %@", first, second); 
     } 
     - (void) performMethodsViaSelectors { 
      [self performSelector:@selector(fooNoInputs)]; 
      [self performSelector:@selector(fooOneInput:) withObject:@"first"]; 
      [self performSelector;@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second"];*/ 

     //UIView *old = self.view; 

     if (element == ccName) { 
      [button addTarget:self action:@selector(showCCView) 
       forControlEvents:UIControlEventTouchUpInside]; 
      } 
      else if (element == fcName) { 
      } 
      else { 
      } 

     [self.view addSubview: button]; 
     j++; 
    } 

} 

// This method show the content views for each of the sites. 
/*+ (void) showCCView { 
    self.view = [SiteOneController ccContent]; 
}*/ 

Répondre

1

Vous essayez d'utiliser la même instance de View contrôleur pour contrôler plusieurs objets View, qui ne fonctionne tout simplement pas. Si vous souhaitez effectuer une transition pour afficher une autre vue, vous devez l'afficher à l'aide d'un autre contrôleur de vue ou ajouter la nouvelle vue en tant que sous-vue de la fenêtre.