最近在做一個項目,記錄一下項目中遇到的問題;
1.框架問題
- 項目需求,大部分頁面為H5頁面,也就是ios只是做一個殼子。只有首頁為IOS原生界面,其他頁面為H5頁面。
- 初步設定兩個控制器,1個顯示主頁的控制器,1個加載H5頁面的控制器,但是tabBar還是有5個item,也就算是做假頁面吧。點擊第一個item,顯示主頁面,點擊后4個item,顯示一個控制器,然后根據不同的item加載不同的H5頁面。
QQ20160707-0@2x.png
2.如何加載頁面
如何在只有兩個控制器的情況下,添加5個Item,自己試驗了幾種方法。(1.自定義tabbar,然后在tabBarController中KVC替換tabBar,結果沒有顯示任何item。2.直接創建tabBarController的XIB文件,在XIB文件里添加tabBar,也不顯示,因為tabBarController的tabBar屬性是只讀的,不能直接修改。3.直接創建UIViewController作為根控制器,添加tabBar,可以顯示,問題是只能在一個頁面上顯示,不能作為第二個頁面的跟控制器,PUSH到第二個頁面之后tabbar就不顯示了)
最終解決方法:UITabBarController仍然是添加5個控制器,這樣就可以顯示出來5個item了,但是后4個控制器為同一個控制器。在點擊tabBar的后四個item的時候,實際顯示的都是同一個界面。問題結局
// 添加控制器
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的點擊
/**
* 當點擊我的時,判斷當前用戶是否登錄,如果登錄,執行跳轉,如果沒有登錄,跳轉到登錄界面
*/
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
// 從用戶設置中取出登錄狀態信息
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跳轉到指定頁面
UITabBarController *rootVC = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
rootVC.selectedIndex = 0;
4.關于宏定義
- 項目中有很多網絡請求地址,很多開發者喜歡使用宏定義放到pch文件里,從而導致宏定義過多,導致預編譯文件過多,編譯過慢,其實很多常量可以放到const文件中。
5.調試,重新定義宏定義,特別實用
- // 調試打印
#ifdef DEBUG
#define YLog(...) NSLog(__VA_ARGS__)
#else
#define YLog(...)
#endif
// 打印方法名稱
#define YLogFunc YLog(@"%s",__func__)
6.推送如何失效問題
今天突然發現推送失效了,查看了一下,原來是配置文件出錯了,切換為Auto了
QQ20160809-0@2x.png
本來應該是項目配置好的文件:
QQ20160809-1@2x.png
修改后問題解決。
今天先寫到這,后續再更新