【 iOS 】 UIViewController, UINavigationController 와 UITabBarController 의 통합 사용
UINavigationController 와 UITabBarController 는 iOS 개발 에서 가장 많이 사용 되 는 두 가지 보기 컨트롤 러 로 모두 UIViewController 의 하위 클래스 에 속 합 니 다. 계승 관 계 는 다음 과 같 습 니 다.
@interface UITabBarController : UIViewController
@interface UINavigationController : UIViewController
UINavigationController: 같은 등급 의 페이지 간 의 점프, 인터페이스의 전형 적 인 특징 은 페이지 상단 에 UINavigationBar 네 비게 이 션 바 가 있 고 네 비게 이 션 바 는 제목, 왼쪽 상단 의 버튼 (일반적으로 되 돌아 오 는 데 사용) 을 설정 할 수 있 으 며 오른쪽 상단 의 버튼 도 이러한 요 소 를 사용자 정의 할 수 있다 는 것 이다.
UITab BarController: 부자 페이지 간 의 내장 관계 입 니 다. 인터페이스의 전형 적 인 특징 은 아래쪽 에 UITabBar 옵션 그룹 이 있 습 니 다. Tab 을 클릭 하면 위의 보기 의 변환 을 전환 할 수 있 습 니 다.
UIViewController, UINavigationController, UITabBarController 세 가 지 를 통합 하여 사용 하면 대부분의 앱 애플 리 케 이 션 페이지 프레임 워 크 를 개발 할 수 있다.
1. 저희 프로젝트 AppDelegate 에 UIViewController 추가
// UIViewController :
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
SplashViewController *splashViewController = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil];
self.window.rootViewController = splashViewController;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
위 에서 말 했 듯 이 UINavigationController 와 UITabBarController 는 UIViewController 의 하위 클래스 이기 때문에 이런 방식 으로 추가 할 수도 있 고 주로 프로젝트 인터페이스의 수 요 를 볼 수 있다.2. UIViewController 간 의 점프 와 전달
일반적인 응용 프로그램 은 한 페이지 만 있 지 않 고 페이지 간 의 이동 은 이렇게 호출 할 수 있 습 니 다.
// UIViewController UIViewController
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
[self presentViewController:loginViewController animated:true completion:^{}];
// UIViewController UIViewController
[self dismissViewControllerAnimated:true completion:^{}];
안 드 로 이 드 개발 에서 넘 어 온 많은 동료 들 이 두 페이지 사이 에 파 라 메 터 를 어떻게 전달 하 느 냐 는 질문 을 한다.
사실, Android 는 Intent 대상 을 통 해 파 라 메 터 를 이동 하고 전달 합 니 다. 현재 페이지 는 다음 페이지 의 인 스 턴 스 를 가 져 올 수 없습니다.iOS 에 서 는 다음 페이지 인 스 턴 스 를 직접 만 드 는 방식 으로 만 들 기 때문에 다음 UIViewController 인 스 턴 스 에서 현재 페이지 에 인 자 를 설정 할 수 있 는 방법 을 제공 할 수 있 습 니 다.
Android 에서 이전 페이지 로 돌아 갈 지, 아니면 Intent 를 통 해 인 자 를 전달 할 지;iOS 에 서 는 프 록 시 를 설정 하 는 방식 으로 인삼 을 전달 할 수 있 습 니 다.구체 적 으로 아래 의 예 를 사용 하면 볼 수 있다.
3. UIViewController 에서 UITabBarController 로 전환
// UIViewController UINavigationController
HomeViewController *homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:homeViewController];
[self presentViewController:navigationController animated:true completion:^{}];
HomeViewController 는 UITabBarController 하위 클래스 로 코드 는 다음 과 같 습 니 다.//HomeViewController UITabBarController
@interface HomeViewController : UITabBarController
@end
4. UITabBarController 내장 하위 페이지이 예 에서 이 UITab BarController 는 UINavigationController 네 비게 이 션 체인 의 한 부분 에 속 하기 때문에 네 비게 이 션 컨트롤 러 에 해당 하 는 방법 을 호출 할 수 있다.
UITabBarController 자 체 는 여러 개의 하위 페이지 를 끼 워 넣 을 수 있 으 며, 각 페이지 는 하나의 UIViewController 로 제공 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//
self.title = @"Message";
//
UIBarButtonItem *leftBtn = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(onLeftBtnClick:)];
self.navigationItem.leftBarButtonItem = leftBtn;
//
UIImage *img = [UIImage imageNamed:@"msgIcon"];
UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithImage:img style:UIBarButtonItemStyleBordered target:self action:nil];
self.navigationItem.rightBarButtonItem = rightBtn;
// Tab
UserListViewController *userListViewController = [[UserListViewController alloc] initWithNibName:@"UserListViewController" bundle:nil];
MessageListViewController *messageListViewController = [[MessageListViewController alloc] initWithNibName:@"MessageListViewController" bundle:nil];
// Tab Tab
self.viewControllers = @[messageListViewController, userListViewController];
// UITabBarControllerDelegate
self.delegate = self;
}
return self;
}
5. UITabBarController 하위 페이지 간 전환 HomeViewController 는 UITabBarController Delegate 프로 토 콜 을 실 현 했 습 니 다. Tab 전환 시 이 동작 을 수행 할 수 있 습 니 다. 다음 과 같 습 니 다.
// , Tab ,
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSInteger index = tabBarController.selectedIndex;
NSString *title;
switch (index) {
case 0:
title = @"Message";
break;
case 1:
title = @"User List";
break;
}
self.title = title;
}
UITab BarController 의 하위 페이지 (UIViewController 인 스 턴 스) 에서 이 하위 페이지 에 대응 하 는 TabBar 항목 의 관련 속성 을 설정 할 수 있 습 니 다. 다음 과 같 습 니 다.- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.tabBarItem.title = @"User List";
self.tabBarItem.image = [UIImage imageNamed:@"chatIcon01"];
}
return self;
}
6. UITabBarController 하위 페이지 에서 UINavigationController 의 다음 페이지 로 이동UITabBarController 하위 페이지 에서 UINavigationController 의 다음 페이지 로 넘 어 갑 니 다. 주의: 전 제 는 UITabBarController 가 UINavigationController 네 비게 이 션 체인 에 속 하 는 노드 입 니 다.
// UITabBarController UINavigationController :
ChatViewController *chatViewController = [[ChatViewController alloc] initWithNibName:@"ChatViewController" bundle:nil];
UITabBarController *homeController = self.tabBarController;
[chatViewController setHomeDelegate:homeController];
[self.tabBarController.navigationController pushViewController:chatViewController animated:true];
여기 서 대리 로 매개 변 수 를 전달 하 는 것 을 말 합 니 다. 이 대리 의 보 의 는 다음 과 같 습 니 다.@protocol HomeDelegate
-(void) onComeback:(NSString*) message;
@end
다음 페이지 (예: ChatViewController) 에 이 프 록 시 를 속성 으로 추가 해 야 합 니 다. 다음 과 같 습 니 다.@interface ChatViewController : UIViewController
@property (weak) id homeDelegate;
@end
@implementation ChatViewController
@synthesize homeDelegate;
@end
7. 이전 페이지 와 매개 변 수 를 되 돌려 줍 니 다.ChatViewController 에서 이전 페이지 로 돌아 가 려 면 다음 코드 를 실행 할 수 있 습 니 다.
[homeDelegate onComeback:@"Hello"];
[self.navigationController popViewControllerAnimated:true];
이렇게 하면 매개 변수의 회전 을 실현 할 수 있다.
UINavigationController 의 페이지 를 되 돌 리 는 두 가지 일반적인 방법:
//
[self.navigationController popViewControllerAnimated:true];
//
[self.navigationController popToRootViewControllerAnimated:true];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.