iOS 프로젝트 기본 프레임 워 크 구축
내 비게 이 션 구조 설계
앱 의 네 비게 이 션 구조 디자인 은 사람들의 조작 관성 과 조작 편의 성 특징 에 부합 되 고 상호작용 에 있어 더욱 합 리 적 이 고 인성 화 되 어야 한다.프로젝트 기능 과 포 지 셔 닝 에 따라 서로 다른 App 의 네 비게 이 션 디자인 은 서로 다른 기술 구 조 를 사용 해 야 한다.현재 흔히 볼 수 있 는 네 비게 이 션 구 조 는 주로 라벨 식,목록 식,행렬 식 세 가지 가 있 는데 다음 과 같다.
현재 정보 뉴스 류 의 모 바 일 엔 드 프로젝트 의 주류 앱 프레임 워 크 는 대체적으로 라벨 식 이다.이런 유형의 네 비게 이 션 디자인 기술 은 대체적으로 TabBar+NavigationController 프레임 워 크 를 통 해 구축 되 었 고 사람들 이 자주 사용 하 는 웨 이 보,오늘 의 특종 등 은 모두 TabBar+NavigationController 와 같은 프레임 워 크 를 사용 했다.TabBar+NavigationController 는 TabBar 에 itemBar 를 추가 해 야 합 니 다.모든 itemBar 는 독립 된 모듈 이 고 모든 itemBar 는 하나의 NavigationController 에 대응 합 니 다.아 이 템 바 마다 내 비게 이 션 이 다 르 기 때문에 TabBar 가 먼저 있 고 Navigation Controller 가 있어 야 합 니 다.
저희 프로젝트 도 정보 류 에 속 하기 때문에 저희 프로젝트 의 프레임 워 크 도 TabBar+Navigation Controller 로 구축 되 었 습 니 다.오늘 우리 의 주요 임 무 는 바로 우리 TabBar 를 구축 하 는 것 입 니 다.시스템 자체 가 가지 고 있 는 UITabBarController(홈 페이지 문서 스탬프 여기)를 사용 하면 사용 과정 에서 몇 가지 주의해 야 할 점 이 있 습 니 다.
모든 barItem 은 하나의 ViewController 에 대응 해 야 합 니 다.일반적인 ViewController 일 수도 있 고 UINavigationController barItem 에 대응 하 는 ViewController 나 UINavigationController 의 frame 일 수도 있 습 니 다.사용자 정의 로 설정 하면...맨 아래 TabBar 바 아 이 템 을 가리 지 않도록 주의 하 세 요.UITabBarController 에 추 가 된 순서 와 일치 합 니 다.추 가 된 barItem 개수<=5 개 일 때 맨 아래 바 아 이 템 에 골 고루 분포 합 니 다.위의 그림 에서 보 듯 이 4 개 추 가 된 barItem 개수>5 개 일 때 앞의 4 개 에 추 가 된 barItem 만 표시 하고[more]를 추가 합 니 다.[more]를 누 르 면 목록 을 선택 할 수 있 고 목록 의 오른쪽 상단 에[edit]버튼 이 있 습 니 다.누 르 면 barItem 의 표시 순 서 를 조정 할 수 있 습 니 다.아래 그림 과 같 기 때문에 TabBar+NavigationController 프레임 의 barItem 개 수 는 5 개 를 초과 하지 않 는 것 이 좋 습 니 다.그렇지 않 으 면 사용자 체험 이 좋 지 않 습 니 다.
itemBar 에 대응 하 는 ViewController 를 추가 하 는 방법 은 두 가지 가 있 습 니 다.하 나 는 UITabBarController 를 사용 하 는 것 입 니 다. setViewControllers: 방법 설정;둘 째 는 UIViewController 를 사용 하 는 거 예요. addChildViewController: 방법 은 하위 보 기 를 추가 하고 tabBar 에 추가 하 는 기능 도 실현 할 수 있 습 니 다.그러나 이 방법 은 barItem 개수>5 일 때 앞의 다섯 개 만 표시 되 고 나머지 는 나타 나 지 않 을 때 나 오 며[more]단 추 를 선택 할 수 없습니다.
예제 코드 는 다음 과 같 습 니 다.사용자 정의 TabBarController 는 UITabBarController 에서 계승 한 다음 다시 씁 니 다. viewDidLoad 하위 보기 와 탭 을 추가 하 는 방법:
@implementation XMGTabBarController
- (void)viewDidLoad {
[super viewDidLoad];
// 4 item bar
UITableViewController *vc0 = [[UITableViewController alloc] init];
vc0.view.backgroundColor = [UIColor redColor];
vc0.tabBarItem.title = @" ";
vc0.tabBarItem.image = [UIImage imageNamed:@"tabBar_essence_icon"];
vc0.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_essence_click_icon"];
[self addChildViewController:vc0];
UIViewController *vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor blueColor];
vc1.tabBarItem.title = @" ";
vc1.tabBarItem.image = [UIImage imageNamed:@"tabBar_new_icon"];
vc1.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_new_click_icon"];
[self addChildViewController:vc1];
UITableViewController *vc2 = [[UITableViewController alloc] init];
vc2.view.backgroundColor = [UIColor greenColor];
vc2.tabBarItem.title = @" ";
vc2.tabBarItem.image = [UIImage imageNamed:@"tabBar_friendTrends_icon"];
vc2.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_friendTrends_click_icon"];
[self addChildViewController:vc2];
UIViewController *vc3 = [[UIViewController alloc] init];
vc3.view.backgroundColor = [UIColor grayColor];
vc3.tabBarItem.title = @" ";
vc3.tabBarItem.image = [UIImage imageNamed:@"tabBar_me_icon"];
vc3.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_me_click_icon"];
[self addChildViewController:vc3];
// ,
// [self addChildViewController:@[vc0,vc1,vc2,vc3]];
}
2.개발 과정 에서 코드 재 구성 에 주의 하 세 요.개발 과정 에서 우 리 는 같은 코드 를 반복 적 으로 쓰 지 않 는 것 이 좋 습 니 다.따라서 개발 과정 에서 우 리 는 우리 의 코드 를 재 구성 하고 간소화 해 야 합 니 다.주요 원칙 은 가능 한 한 한 하나의 방법 으로 하나의 기능 을 실현 한 다음 에 중복 되 는 코드 를 쓰 지 않 고 순 서 를 간소화 하 는 것 입 니 다.앞에서 tabBar item 을 추가 한 코드 에 중복 성 코드 가 대량으로 존재 하기 때문에 재 구성 해 야 합 니 다.중복 성 코드 를 추출 하고 서로 다른 내용 을 매개 변수 로 설정 하여 사용자 정의 설정 을 해 야 합 니 다.재 구성 후의 논 리 는 다음 과 같 습 니 다.
@implementation XMGTabBarController
- (void)viewDidLoad {
[super viewDidLoad];
/**** ****/
[self setupOneChildViewController:[[UITableViewController alloc] init] title:@" " image:@"tabBar_essence_icon" selectedImage:@"tabBar_essence_click_icon"];
[self setupOneChildViewController:[[UITableViewController alloc] init] title:@" " image:@"tabBar_new_icon" selectedImage:@"tabBar_new_click_icon"];
[self setupOneChildViewController:[[UIViewController alloc] init] title:@" " image:@"tabBar_friendTrends_icon" selectedImage:@"tabBar_friendTrends_click_icon"];
[self setupOneChildViewController:[[UITableViewController alloc] init] title:@" " image:@"tabBar_me_icon" selectedImage:@"tabBar_me_click_icon"];
}
/**
*
*
* @param vc
* @param title
* @param image
* @param selectedImage
*/
- (void)setupOneChildViewController:(UIViewController *)vc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
vc.view.backgroundColor = [UIColor redColor];
vc.tabBarItem.title = title;
vc.tabBarItem.image = [UIImage imageNamed:image];
vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImage];
[self addChildViewController:vc];
}
@end
3 UITabBarItem 설정 iOS 개발 과정 에서 시스템 이 가지 고 있 는 공간 은 일부 그림 을 표시 할 때 파란색 으로 자동 으로 렌 더 링 할 때 가 있 습 니 다.예 를 들 어 가지 고 있 는 TabBarItem 이 선택 한 그림,그리고 UIButtonTypeSystem 스타일 을 설정 할 때 단 추 를 누 르 는 그림 등 이 있 을 때 시스템 은 자동 으로 파란색 으로 렌 더 링 됩 니 다.
vc.tabBarItem.selectedImage = image;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
[btn setImage:image forState:UIControlStateNormal];
3.1 이미지 렌 더 링 문제우 리 는 개발 과정 에서 가끔 이런 렌 더 링 이 필요 하지 않 습 니 다.개발 한 App 이 우리 가 설정 한 그림 에 따라 표시 되 기 를 바 랍 니 다.이것 은 우리 가 그림 에 대해 렌 더 링 을 금지 하 는 설정 과 조작 이 필요 합 니 다.두 가지 해결 방안 이 있다.
렌 더 링 하지 않 는 그림 을 다시 만 듭 니 다.
//
UIImage *tempImage = [UIImage imageNamed:@"tabBar_essence_click_icon"];
//
UIImage *selectedImage = [tempImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
vc.tabBarItem.selectedImage = selectedImage;
xcassets 파일 에 그림 이 렌 더 링 되 지 않도록 직접 설정 합 니 다.3.2 TabBarItem 의 텍스트 속성 설정
상기 우리 팀 의 그림 을 수정 한 후에 tabBarItem 의 그림 은 우리 가 설정 한 그림 에 따라 완전히 표시 할 수 있 지만 개발 과정 에서 우 리 는 tabBarItem 의 제목 의 글꼴,글꼴 등 문자 속성 을 설정 해 야 할 때 가 많다.tabBarItem 의 문자 속성 을 설정 하려 면 저희 도 두 가지 해결 방안 이 있 습 니 다.
모든 tabBarItem 대상 직접 설정
//
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
[vc.tabBarItem setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
//
NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
[vc.tabBarItem setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];
주의해 야 할 것 은:
// key
1.iOS7 ( UIStringDrawing.h )
- UITextAttributeFont\UITextAttributeTextColor
- :UITextAttributeXXX
2.iOS7 ( NSAttributedString.h )
- NSFontAttributeName\NSForegroundColorAttributeName
- :NSXXXAttributeName
UITabBarItem 의 appearance 대상 을 통일 적 으로 설정 합 니 다.
/**** UITabBarItem ****/
UITabBarItem *item = [UITabBarItem appearance];
//
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
[item setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
//
NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor];
[item setTitleTextAttributes:normalAttrs forState:UIControlStateSelected];
3.3 UIAppearance하나의 클래스 가 UIAppearance 를 준수 하면 전체적인 외관 을 얻 을 수 있 습 니 다.UIview 는 모든 외관 을 얻 을 수 있 습 니 다.우 리 는 모든 tabBarItem 외관 표 지 를 얻 을 수 있 습 니 다.그러나 아래 와 같은 방법 을 사용 하지 않 습 니 다.아래 와 같은 방법 은 전체적인 tabBarItem 외관 표 지 를 얻 기 때 문 입 니 다.우 리 는 개발 할 때 자신 이 개발 한 부분 을 책임 집 니 다.따라서 다음 두 번 째 방법 을 사용 하여 현재 클래스 의 tabBarItem 외관 표지 만 가 져 오 는 것 을 추천 합 니 다.
// tabBarItem
UITabBarItem *item = [UITabBarItem appearance];
// tabBarItem
UITabBarItem *item = [UITabBarItem appearanceWhenContainedIn:self, nil]
appearance 사용 주의:컨트롤 이 표시 되 기 전에 설정 해 야 합 니 다.보통+(void)load 방법 에 넣 고+(void)initialize 에 넣 지 않 습 니 다.+(void)load 방법 은 한 번 만 호출 되 기 때 문 입 니 다.+(void)initialize 는 여러 번 호출 될 수 있 으 므 로 사용 할 때 판단 이 필요 합 니 다.load 방법:클래스 를 불 러 올 때 호출 합 니 다.클래스 는 언제 불 러 옵 니까?프로그램 이 시작 하 자마자 load 방법 Initialize 방법 을 호출 합 니 다.클래스 를 초기 화하 고 이 클래스 나 하위 클래스 를 처음 사용 할 때 viewdidload 방법 을 호출 합 니 다.viewcontroller 가 처음 표 시 될 때 불 러 옵 니 다.viewController 는 모두 게 으 른 로 딩 입 니 다.곧 표 시 될 때 viewdideLoad 를 불 러 옵 니 다.그러나 tabbarcontroller 만 컨트롤 러 를 만 들 때 viewdideLoad 를 불 러 옵 니 다.
4 pch 파일 의 정의
PCH 파일(Precompile Prefix Header File),즉 사전 컴 파일 헤더 파일 입 니 다.여러 파일 에 동시에 사용 되 는 헤더 파일,매크로 또는 URL 주소 등(전역 적 으로 사용)을 한꺼번에 가 져 올 수 있 도록 도와 주 고 시간 을 절약 하 며 개발 효율 을 높 일 수 있 습 니 다.그러나 Xcode 5 이후 이 파일 은 기본적으로 제공 되 지 않 습 니 다.계속 사용 하려 면 수 동 으로 만 들 고 설정 해 야 합 니 다.왜 기본적으로 제공 하지 않 는 지 에 대해 서 는 컴 파일 효율 을 높이 기 위 한 고려 일 수 있 습 니 다.사전 컴 파일 도 Build 의 시간 을 향상 시 킬 수 있 기 때 문 입 니 다.
PCH 파일 을 만 들 고 설정 하 는 방법 에 대한 자세 한 내용 은 ios 에서 pch 파일 의 생 성과 설정 을 참조 할 수 있 습 니 다.
다음은 PCH 파일 을 작성 할 때 주의해 야 할 몇 가지 상황 입 니 다.
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
/*** (OC\C\C++ ), #ifdef __OBJC__ #endif ***/
/***** #ifdef __OBJC__ #endif , OC , *****/
#ifdef __OBJC__
#endif
/***** #ifdef __OBJC__ #endif , OC , *****/
#endif
다섯. Build Setting 에 매크로 설정 매크로 정 의 는 클래스 에서\#define 으로 정의 하 는 것 을 제외 하고 iOS 개발 과정 에서 우 리 는 Build Setting 에서 매크로 를 설정 할 수 있 습 니 다.Build Setting 에서 정의 하 는 매크로 는 프로젝트 에서 찾 을 수 없습니다.바로 우리 가[command]+[마우스 클릭]을 통 해[?]을 표시 합 니 다.정 의 된 위치 로 이동 할 수 없습니다.이 때 는 Build Setting 에 설정 되 어 있 을 수 있 습 니 다.예 를 들 어 우리 가 자주 보 는 매크로 DEBUG 는 Build Setting 에 설정 되 어 있 습 니 다.
주의 점:Build Setting 에서 설정 한 매크로 의 이름 이 모두 소문 자 일 수 는 없습니다.매크로 의 이름 이 모두 소문 자 일 경우 다음 과 같은 오류 가 발생 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.