iOS 4.x/5.0 용 첫 번째 iPhone 앱을 개발 중이며 권장 Apple 가이드 라인을 준수하는 방법에 대한 약간의 혼란이 있습니다. 또한 코드 스 니펫을 첨부했습니다. iOS 5 초보자 - iPhone 앱 개발에 도움이 필요합니다.
응용 프로그램로드, 나는 화면 하단에 다음과 같은 기능을 보여주고 싶은
: 테스트 설정 여기 는 시나리오입니다. 내 첫 번째 질문은 UISegmentedControl 또는 UITabBar 함께 가야합니까? 가장 까다로운 부분은 첫 번째 "테스트"탭/버튼이 자동으로 선택되기를 원하지 않는다는 것입니다. 사용자가 탭/버튼을 선택하길 원합니다. 그 때까지는 일부 텍스트를 보여주는 타이머가 필요합니다. UITabBar를 사용하려고 시도하고 앱이로드되면 첫 번째 '테스트'탭이 선택되고 연결된 ViewController가 기본적으로 표시됩니다. AppDelegate.m의 "didFinishLaunchingWithOptions"메서드에서 "루트보기 컨트롤러"를 눌러이 문제를 피할 수있었습니다. 이것은 작동하고 "점수"탭을 클릭하면 "루트보기 컨트롤러"가 팝업되고 "테스트보기 컨트롤러"가 푸시됩니다. 하지만 응용 프로그램이로드 된 후 "설정"탭을 선택하고 "테스트"탭을 클릭하면 "테스트"탭의보기 컨트롤러가 전혀로드되지 않지만 "기본보기 컨트롤러"는 계속 표시됩니다. 또한 "테스트"탭에 UINavigationController가 있으며 "viewDidAppear"이벤트에서이를 숨 깁니다. 또한 "Test"탭을 클릭했을 때 애니메이션 (뒤로 밀기)을 제거하고 싶습니다.내 혼란은 다음과 같습니다
내가 때 "테스트 뷰 컨트롤러 (상단에 표시)에"시작/정지 "버튼을 사용자가 클릭 수 있도록 다른 컨트롤로 UINavigationController가를 대체 할 수 "?
각 탭에 대해 UITabBar의 탭에 클릭 이벤트가 있습니까?
코드에서부터 컨트롤 추가를 제외한 모든 것을 ViewController에 적용하고 싶었습니다. 동일한 일을하기 위해 IB를 사용하는 것이 혼란스럽게 보입니다. 이것은 나쁜 접근입니까?
AppDelegate.m#import "NavTabTestAppDelegate.h" #import "RootViewController.h" #import "FirstViewController.h" #import "SecondViewController.h" @implementation NavTabTestAppDelegate @synthesize window = _window; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { RootViewController *rootViewController = [[RootViewController alloc ] initWithNibName:@"RootViewController" bundle: nil]; [rootViewController.view setBackgroundColor:[UIColor blueColor]]; // [rootViewController setTitle:@"RootViewController"]; FirstViewController *firstViewController = [[FirstViewController alloc ] initWithNibName:@"FirstViewController" bundle: nil]; [firstViewController.view setBackgroundColor:[UIColor yellowColor]]; [firstViewController setTitle:@"FirstViewController"]; SecondViewController *secondViewController = [[SecondViewController alloc ] initWithNibName:@"SecondViewController" bundle: nil]; [secondViewController.view setBackgroundColor:[UIColor redColor]]; [secondViewController setTitle:@"SecondViewController"]; //create the navigation controller and use NavRootController as its root UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstViewController]; //create an array of views that will be passed to our tabbar NSArray *viewsArray = [NSArray arrayWithObjects:nav, secondViewController, nil]; //Now create our tab bar controller UITabBarController *tabbarController = [[UITabBarController alloc] init]; //then tell the tabbarcontroller to use our array of views [tabbarController setViewControllers:viewsArray]; [nav pushViewController:rootViewController animated:NO]; //nav.view.hidden = YES; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; //then the last step is to add the our tabbarcontroller as subview of the window self.window.rootViewController = tabbarController; return YES; }
RootViewController.m (다음의 코드를 추가)
- (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated]; // NSLog(@"Inside RootViewController.m viewWillAppear %@", animated); } - (void) viewWillDisappear:(BOOL)animated{ // NSLog(@"Inside RootViewController.m viewWillDisappear %@", "Done"); [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO animated:NO]; }
FirstViewController.m합니다 (추가 :
다음 코드 조각이며 다음 코드는 애니메이션을 방지하지만 작동하지 않음)
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
// NSLog(@"Inside FirstViewController.m viewWillAppear %@", animated);
}
- (void) viewWillDisappear:(BOOL)animated{
// NSLog(@"Inside FirstViewController.m viewWillDisappear %@", "Done");
[super viewWillAppear:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
탭 (BAD_ACCESS)을 클릭하면 NSLogs가 예외를 throw합니다. 이유를 알아낼 수 없었습니다.
저는 Windows 개발자 배경에서 왔으며 오랫동안 사과드립니다. 도와주세요.
감사합니다.
이 질문을 이해하기 쉽도록 많이 만들 수 있습니다. 포함 된 코드는 전혀 도움이되지 않으며 중간에 매우 조밀하고 혼란스러운 단락이 있습니다. 귀하가 정말로 알고 자하는 것에 대한 기본 사항으로 질문을 추출하십시오. – Caleb