最近在做一個項目平绩,記錄一下項目中遇到的問題圈匆;
1.框架問題
- 項目需求,大部分頁面為H5頁面捏雌,也就是ios只是做一個殼子跃赚。只有首頁為IOS原生界面,其他頁面為H5頁面性湿。
- 初步設(shè)定兩個控制器纬傲,1個顯示主頁的控制器,1個加載H5頁面的控制器肤频,但是tabBar還是有5個item叹括,也就算是做假頁面吧。點擊第一個item宵荒,顯示主頁面汁雷,點擊后4個item,顯示一個控制器报咳,然后根據(jù)不同的item加載不同的H5頁面摔竿。
2.如何加載頁面
如何在只有兩個控制器的情況下,添加5個Item少孝,自己試驗了幾種方法。(1.自定義tabbar熬苍,然后在tabBarController中KVC替換tabBar稍走,結(jié)果沒有顯示任何item。2.直接創(chuàng)建tabBarController的XIB文件柴底,在XIB文件里添加tabBar婿脸,也不顯示,因為tabBarController的tabBar屬性是只讀的柄驻,不能直接修改狐树。3.直接創(chuàng)建UIViewController作為根控制器,添加tabBar鸿脓,可以顯示抑钟,問題是只能在一個頁面上顯示,不能作為第二個頁面的跟控制器野哭,PUSH到第二個頁面之后tabbar就不顯示了)
最終解決方法:UITabBarController仍然是添加5個控制器在塔,這樣就可以顯示出來5個item了,但是后4個控制器為同一個控制器拨黔。在點擊tabBar的后四個item的時候蛔溃,實際顯示的都是同一個界面。問題結(jié)局
// 添加控制器
YMainViewController *Essence = [[YMainViewController alloc] init];
[self setupVc:Essence Title:@"xxx" Image:@"nav_icon01" selectImage:@"nav_icon01_cur"];
YH5ViewController *expertVC = [[YH5ViewController alloc] init];
[self setupVc:expertVC Title:@"xxx" Image:@"nav_icon02" selectImage:@"nav_icon02_cur"];
YH5ViewController *communityVC = [[YH5ViewController alloc] init];
[self setupVc:communityVC Title:@"xxx" Image:@"nav_icon03" selectImage:@"nav_icon03_cur"];
YH5ViewController *knowledgeVC = [[YH5ViewController alloc] init];
[self setupVc:knowledgeVC Title:@"xxx" Image:@"nav_icon05" selectImage:@"nav_icon05_cur"];
YH5ViewController *Me = [[YH5ViewController alloc] init];
[self setupVc:Me Title:@"xxx" Image:@"nav_icon06" selectImage:@"nav_icon06_cur"];
3.如何阻斷tabBar的點擊
/**
* 當(dāng)點擊我的時,判斷當(dāng)前用戶是否登錄贺待,如果登錄徽曲,執(zhí)行跳轉(zhuǎn),如果沒有登錄麸塞,跳轉(zhuǎn)到登錄界面
*/
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
// 從用戶設(shè)置中取出登錄狀態(tài)信息
NSNumber *isLogin = [[NSUserDefaults standardUserDefaults] objectForKey:@"ISLOGIN"];
if (viewController == tabBarController.viewControllers[3] && ![isLogin boolValue ]) {
YLoginViewController *loginVC = [[YLoginViewController alloc] init];
YNavViewController *nav = [[YNavViewController alloc] initWithRootViewController:loginVC];
UIViewController * rootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootVC presentViewController:nav animated:YES completion:nil];
return NO;
}
return YES;
}
4.tabBar跳轉(zhuǎn)到指定頁面
UITabBarController *rootVC = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
rootVC.selectedIndex = 0;
4.關(guān)于宏定義
- 項目中有很多網(wǎng)絡(luò)請求地址秃臣,很多開發(fā)者喜歡使用宏定義放到pch文件里,從而導(dǎo)致宏定義過多喘垂,導(dǎo)致預(yù)編譯文件過多甜刻,編譯過慢,其實很多常量可以放到const文件中正勒。
5.調(diào)試,重新定義宏定義得院,特別實用
- // 調(diào)試打印
#ifdef DEBUG
#define YLog(...) NSLog(__VA_ARGS__)
#else
#define YLog(...)
#endif
// 打印方法名稱
#define YLogFunc YLog(@"%s",__func__)
6.推送如何失效問題
今天突然發(fā)現(xiàn)推送失效了,查看了一下章贞,原來是配置文件出錯了祥绞,切換為Auto了
本來應(yīng)該是項目配置好的文件:
修改后問題解決。
今天先寫到這鸭限,后續(xù)再更新