안녕하세요. 그래서 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];
}*/