2010-03-11 4 views
0

안녕하세요. 그래서 loadView 내에서 버튼을 동적으로 생성합니다. 각 버튼에는 다음과 같이 @Selector 메서드를 사용하여 액션이 제공됩니다.'loadView'외부에서 생성 된 버튼 메서드 내에서 'self.view'를 어떻게 변경합니까?

[button addTarget : 자체 액션 : @selector (showCCView) forControlEvents : UIControlEventTouchUpInside];

showCCView 메소드가 위의 명령문이있는 loadView 외부에 정의되었습니다. 메소드의 요점은 현재 화면에있는보기를 변경하는 것입니다 (그래서 self.view = ccView를 설정하십시오). 로드 뷰 외부에서 self.view를 시도 할 때마다 오류가 발생하며 loadView 내의 임의의 위치에서 액세스하려고 할 때도 때로는 정말 이상하게 작동합니다.

주위를 바꾸려고 했으므로이 문제도 해결할 필요가 없었습니다. 내가 만든 함수 + (void) showView : (UIView *) oldView : (UIView *) newView; 그러나 이것은 @Selector가 두 개의 매개 변수를 필요로하는 함수와 함께 사용하기에는 참으로 어긋나 기 때문에 어느 쪽도 효과가 없었습니다.

도움이 필요하십니까? 당신은 그냥 작동하지 않는 여러 뷰 객체를 제어하기 위해 같은보기 컨트롤러 인스턴스를 사용하려고

// 
// 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]; 
}*/ 

답변

1

:

여기 내 코드입니다. 다른보기를 표시하기 위해 전환하려면 다른보기 제어기를 사용하여 표시하거나 최소한 새보기를 창의 하위보기로 추가해야합니다.

관련 문제