Wie kann ich innerhalb einer Schaltfläche Methode außerhalb von ‚Loadview‘ geschaffen ‚self.view‘ ändern

StackOverflow https://stackoverflow.com/questions/2425430

Frage

Hey guys. So bin ich Tasten dynamisch innerhalb Loadview zu schaffen. Jede dieser Tasten ist eine Aktion mit dem @selector Verfahren gegeben, wie zum Beispiel:

[Taste addTarget: Selbst Aktion: @selector (showCCView) forControlEvents: UIControlEventTouchUpInside];

Nun, da showCCView Methode außerhalb von Loadview definiert, wobei diese obigen Aussage befindet. Der Punkt des Verfahrens ist die Ansicht zur Zeit auf dem Bildschirm zu ändern (so eingestellt self.view = ccView). Es gibt mir einen Fehler jedes Mal, wenn ich versuche und Zugang self.view außerhalb von Loadview, und manchmal sogar, wenn ich versuche, und greifen Sie an zufälligen Stellen innerhalb Loadview, es wirkt nur ist wirklich seltsam.

Ich habe versucht, es um so zu ändern, würde ich auch nicht damit zu tun haben. (UIView *) oldView: (UIView *) NewView, ich hatte eine Funktion + (void) SHOWVIEW- gemacht aber das hat nicht funktioniert, entweder weil der @selector wurde reell zimperlich über die Verwendung mit einer Funktion, die zwei Parameter benötigt werden.

Jede Hilfe bitte?

Hier ist mein 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];
}*/
War es hilfreich?

Lösung

Sie versuchen, die gleiche Ansicht Controller-Instanz zu verwenden, um mehr Anzeigen von Objekten zu steuern, die gerade nicht funktioniert. Wenn Sie den Übergang wollen eine andere Ansicht angezeigt werden, sollten Sie es zeigen eine andere Ansicht-Controller verwenden, oder die neue Ansicht als Subview des Fensters zumindest hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top