十分鐘搭建App主流框架_純代碼搭建(OC)

搭建主流框架界面

  • 源碼地址在文章末尾
  • 達(dá)成效果


    效果圖
    • 注:本文部分圖標(biāo)及效果圖來自[IT江湖] https://github.com/itjhDev/itjh

導(dǎo)讀

  • 我們玩iPhone應(yīng)用的時候魏保,有沒發(fā)現(xiàn)大部分的應(yīng)用都是上圖差不多的結(jié)構(gòu)么翰,下面的TabBar控制器可以切換子控制器,上面又有Navigation導(dǎo)航條
  • 我們本文主要是討論主體框架的搭建三痰,數(shù)據(jù)暫時沒有添加

分析做項目的基本流程

  • 1.搭建項目主框架
    • (1)先搭建tabBarController(下面有一條)
    • (2)再搭建NavigationController(上面有一條,并且每個子控制器的不一樣)
  • 2.思考開發(fā)方式
    • (1)storyboard搭建(界面很少的時候使用)
    • (2)純代碼搭建(界面超過5個的時候使用箭昵,易于管理婿崭,商業(yè)項目中,一般都使用這種方式)

從0開始搭建主流框架(純代碼)

1.準(zhǔn)備工作

  • 環(huán)境部署
Snip20150904_11.png

2.初步搭建基本界面

  • 第一步 設(shè)計目錄(根據(jù)模塊化+MVC思想狠轻,創(chuàng)建基本文件目錄與文件)
    • 模塊化思想創(chuàng)建目錄路徑(一般先在真實路徑下創(chuàng)建,再拖到項目中)
    • 自定義TabBarController
Snip20150904_4.png
  • 第二步 上代碼(在AppDelegate.m內(nèi)設(shè)置窗口啟動根控制器)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 1.創(chuàng)建窗口
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

    // 2.設(shè)置窗口的根控制器
    CYXTabBarController *tabBarVC = [[CYXTabBarController alloc]init];
    self.window.rootViewController = tabBarVC;

    // 3.顯示窗口
    [self.window makeKeyAndVisible];

    return YES;
}
  • 第三步彬犯,在CYXTabBarController.m內(nèi)創(chuàng)建并添加子控制器
- (void)viewDidLoad {
    [super viewDidLoad];

    // 1.添加第一個控制器
    // 1.1 初始化
    CYXOneViewController *oneVC = [[CYXOneViewController alloc]init];

    // 1.2 把oneVC添加為UINavigationController的根控制器
    UINavigationController *nav1 = [[UINavigationController alloc]initWithRootViewController:oneVC];

    // 設(shè)置tabBar的標(biāo)題
    nav1.title = @"首頁";
    [nav1.navigationBar setBackgroundImage:[UIImage imageNamed:@"commentary_num_bg"] forBarMetrics:UIBarMetricsDefault];

    // 設(shè)置tabBar的圖標(biāo)
    nav1.tabBarItem.image = [UIImage imageNamed:@"tab_home_icon"];

    // 設(shè)置navigationBar的標(biāo)題
    oneVC.navigationItem.title = @"首頁";

    // 設(shè)置背景色(這些操作可以交給每個單獨(dú)子控制器去做)
    oneVC.view.backgroundColor = [UIColor whiteColor];

    // 1.3 把UINavigationController交給UITabBarController管理
    [self addChildViewController:nav1];

    // 2.添加第2個控制器
    CYXTwoViewController *twoVC = [[CYXTwoViewController alloc]init];
    UINavigationController *nav2 = [[UINavigationController alloc]initWithRootViewController:twoVC];
    nav2.title = @"技術(shù)";
    nav2.tabBarItem.image = [UIImage imageNamed:@"js"];
    twoVC.navigationItem.title = @"技術(shù)";
    twoVC.view.backgroundColor = [UIColor blueColor];
    [self addChildViewController:nav2];

    // 3.添加第3個控制器
    CYXThreeViewController *threeVC = [[CYXThreeViewController alloc]init];
    UINavigationController *nav3 = [[UINavigationController alloc]initWithRootViewController:threeVC];
    nav3.title = @"博文";
    nav3.tabBarItem.image = [UIImage imageNamed:@"qw"];
    threeVC.navigationItem.title = @"博文";
    threeVC.view.backgroundColor = [UIColor yellowColor];
    [self addChildViewController:nav3];

    // 4.添加第4個控制器
    CYXFourViewController *fourVC = [[CYXFourViewController alloc]init];
    UINavigationController *nav4 = [[UINavigationController alloc]initWithRootViewController:fourVC];
    nav4.title = @"我的江湖";
    nav4.tabBarItem.image = [UIImage imageNamed:@"user"];
    fourVC.navigationItem.title = @"我的江湖";
    fourVC.view.backgroundColor = [UIColor grayColor];
    [self addChildViewController:nav4];

}
  • 進(jìn)行到這里向楼,我們已經(jīng)把框架搭起來了,是不是很簡單谐区?效果如圖:
Snip20150904_8.png
  • 但你可能會忍不住吐槽了湖蜕,這些全是冗余的垃圾代碼,沒有可讀性宋列,下面就來抽取一下代碼吧

  • 第四步重荠,抽取重復(fù)代碼

    • 由于上文的所有代碼都寫在viewDidLoad里面且重復(fù)代碼過多,造成代碼冗余虚茶,可擴(kuò)展性不高的問題戈鲁,下面讓我們來對代碼進(jìn)行初步優(yōu)化。
    • 這里提取兩個方法嘹叫,一個是添加所有子控制器的方法婆殿,另一個是添加每一個子控制器的方法
- (void)viewDidLoad {
    [super viewDidLoad];

    [self setUpAllChildViewController];
}

/**
 *  添加所有子控制器方法
 */
- (void)setUpAllChildViewController{
    // 1.添加第一個控制器
    CYXOneViewController *oneVC = [[CYXOneViewController alloc]init];
    [self setUpOneChildViewController:oneVC image:[UIImage imageNamed:@"tab_home_icon"] title:@"首頁"];

    // 2.添加第2個控制器
    CYXTwoViewController *twoVC = [[CYXTwoViewController alloc]init];
    [self setUpOneChildViewController:twoVC image:[UIImage imageNamed:@"js"] title:@"技術(shù)"];

    // 3.添加第3個控制器
    CYXThreeViewController *threeVC = [[CYXThreeViewController alloc]init];
    [self setUpOneChildViewController:threeVC image:[UIImage imageNamed:@"qw"] title:@"博文"];

    // 4.添加第4個控制器
    CYXFourViewController *fourVC = [[CYXFourViewController alloc]init];
    [self setUpOneChildViewController:fourVC image:[UIImage imageNamed:@"user"] title:@"我的江湖"];
}


/**
 *  添加一個子控制器的方法
 */
- (void)setUpOneChildViewController:(UIViewController *)viewController image:(UIImage *)image title:(NSString *)title{

    UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:viewController];
    navC.title = title;
    navC.tabBarItem.image = image;
    [navC.navigationBar setBackgroundImage:[UIImage imageNamed:@"commentary_num_bg"] forBarMetrics:UIBarMetricsDefault];

    viewController.navigationItem.title = title;

    [self addChildViewController:navC];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罩扇,隨后出現(xiàn)的幾起案子婆芦,更是在濱河造成了極大的恐慌,老刑警劉巖喂饥,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件消约,死亡現(xiàn)場離奇詭異,居然都是意外死亡员帮,警方通過查閱死者的電腦和手機(jī)或粮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捞高,“玉大人氯材,你說我怎么就攤上這事∠醺冢” “怎么了氢哮?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長型檀。 經(jīng)常有香客問我冗尤,道長,這世上最難降的妖魔是什么胀溺? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任裂七,我火速辦了婚禮,結(jié)果婚禮上月幌,老公的妹妹穿的比我還像新娘碍讯。我一直安慰自己,他們只是感情好扯躺,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布捉兴。 她就那樣靜靜地躺著,像睡著了一般录语。 火紅的嫁衣襯著肌膚如雪倍啥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天澎埠,我揣著相機(jī)與錄音虽缕,去河邊找鬼。 笑死蒲稳,一個胖子當(dāng)著我的面吹牛氮趋,可吹牛的內(nèi)容都是我干的伍派。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剩胁,長吁一口氣:“原來是場噩夢啊……” “哼诉植!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昵观,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晾腔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啊犬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灼擂,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年觉至,在試婚紗的時候發(fā)現(xiàn)自己被綠了剔应。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡康谆,死狀恐怖领斥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沃暗,我是刑警寧澤月洛,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站孽锥,受9級特大地震影響嚼黔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惜辑,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一唬涧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛撑,春花似錦碎节、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至介粘,卻和暖如春殖氏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姻采。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工雅采, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓婚瓜,卻偏偏與公主長得像宝鼓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闰渔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容