項(xiàng)目總結(jié)-1

main程序入口

UIApplication里面做了哪些事情

  • 1.創(chuàng)建UIApplication對(duì)象(UIApplication對(duì)象的作用:1.打電話,發(fā)短信,打開網(wǎng)頁 2.設(shè)置應(yīng)用提醒數(shù)字 3.設(shè)置聯(lián)網(wǎng)狀態(tài) 4.控制器導(dǎo)航欄)
  • 2.創(chuàng)建UIApplication代理對(duì)象(UIApplication代理對(duì)象作用:1.監(jiān)聽整個(gè)應(yīng)用程序的生命周期 2.處理內(nèi)存警告,清空?qǐng)D片緩存)
  • 3.開啟主運(yùn)行循環(huán),保證程序一直運(yùn)行,runloop(重要),每個(gè)線程都有一個(gè)runloop,主線程的runloop自動(dòng)開啟,其他線程的runloop需要手動(dòng)去開啟
  • 4.加載info.plist文件,判斷是否指定了main,如果指定了,就去加載
    • 加載main.storyboard的時(shí)候做的幾件事情
      • 創(chuàng)建窗口
      • 創(chuàng)建窗口的根控制器
      • 顯示窗口

為什么要自定義類

  • 誰的事情誰管理,方便以后改需求,迅速找到對(duì)應(yīng)的類做事情
  • 系統(tǒng)的類不能滿足我們的要求

修改了控制器的返回按鈕,但是沒有點(diǎn)擊按鈕按鈕的時(shí)候按鈕也能做出響應(yīng),如何解決?

 //設(shè)置按鈕的尺寸為自適應(yīng),此時(shí)按鈕的尺寸并不大,但是當(dāng)鼠標(biāo)點(diǎn)擊按鈕右側(cè)很遠(yuǎn)的位置的時(shí)候這個(gè)按鈕也會(huì)被點(diǎn)擊,為了解決這個(gè)問題,可以換用一個(gè)View將按鈕包裝起來,然后用item將View包裝起來
    UIView *view = [[UIView alloc] initWithFrame:btn.bounds];
    [view addSubview:btn];
    return [[UIBarButtonItem alloc] initWithCustomView:view] ;

隱藏push出來的控制器的TabBar

- (void)setting
{
    HMXSettingViewController *settingVc = [[HMXSettingViewController alloc] init];

    // 一定要注意:在Push之前去設(shè)置這個(gè)屬性(通過方法名可以看出,是在push的時(shí)候有效)
    settingVc.hidesBottomBarWhenPushed = YES;

    // 跳轉(zhuǎn)到設(shè)置界面
    [self.navigationController pushViewController:settingVc animated:YES];
}

UITabBarItemUINavigationItem以及UIBarButtonItem

  • UITabBarItem決定TabBar上按鈕的內(nèi)容
  • UINavigationItem決定導(dǎo)航條上左邊,中間,右邊的內(nèi)容
  • UIBarButtonItem決定導(dǎo)航條上按鈕具體的內(nèi)容

利用KVC來替換系統(tǒng)的TabBar的底層實(shí)現(xiàn)

  • 系統(tǒng)的TabBarReadOnly,只能通過KVC,調(diào)用[self setValue:tabBar forKey:@"tabBar"]方法去修改系統(tǒng)的TabBar

  • 那么KVC底層是怎么樣實(shí)現(xiàn)的呢?

    • 系統(tǒng)首先去查找類中有沒有setTabBar方法
    • 查找有沒有tabBar屬性
    • 查找有沒有_tabBar
  • readOnly修飾的屬性不會(huì)生成setter方法,只會(huì)生成getter方法

富文本屬性

  • 如果想修改NavigationBar或者TabBar上面按鈕文字的屬性,可以通過UITabBarItem或者UINavigationBar去設(shè)置titleTextAttributes

一個(gè)惡心的BUG

  • 在獲取全局導(dǎo)航條的時(shí)候,如果[UINavigationBar appearance]去獲取整個(gè)應(yīng)用程序下的導(dǎo)航條,在iOS7的時(shí)候,如果將短信界面的導(dǎo)航條也改了就會(huì)使聯(lián)系人界面出現(xiàn)一片黑

系統(tǒng)自帶的側(cè)滑返回功能

  • 系統(tǒng)有個(gè)自帶的側(cè)滑返回功能,就是一個(gè)導(dǎo)航控制器下的子控制器push出下的一個(gè)控制器之后,想返回上一個(gè)子控制器就可以在左側(cè)側(cè)滑返回,但是一旦重寫了系統(tǒng)的左側(cè)返回按鈕,那么該功能就會(huì)失效

  • 推測(cè):兩種原因?qū)е聜?cè)滑返回功能失效:

    • 1.系統(tǒng)的滑動(dòng)手勢(shì)不在了?(經(jīng)過驗(yàn)證,側(cè)滑手勢(shì)還在,進(jìn)入導(dǎo)航控制器,搜索gesture就可以找出側(cè)滑的手勢(shì)為interactivePopGestureRecognizer)
    • 2.是代理控制側(cè)滑手勢(shì)失效的嗎?驗(yàn)證:代理做了一些事情,使得側(cè)滑手勢(shì)失效
  • 系統(tǒng)的側(cè)滑功能底層實(shí)現(xiàn):如果在非根控制器,當(dāng)觸發(fā)側(cè)滑手勢(shì)的時(shí)候,手勢(shì)會(huì)通知它的代理self.interactivePopGestureRecognizer.delegate去讓Target調(diào)用handleNavigationTransition:方法,實(shí)現(xiàn)側(cè)滑,而通過打印驗(yàn)證,這個(gè)Target正是self.interactivePopGestureRecognizer.delegate本身,如果在根控制器觸發(fā)手勢(shì),那么,系統(tǒng)去做一些控制不去讓代理調(diào)用這個(gè)方法

  • 目前的需求:又想要系統(tǒng)的側(cè)滑返回,又要自定義返回按鈕

  • 解決方案:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Bug:假死狀態(tài):程序一直在跑,但是界面死了

    //自己的理解:
    //在根控制器,系統(tǒng)原本的做法是會(huì)讓代理做一些控制,即使用戶觸發(fā)了側(cè)滑手勢(shì),也不實(shí)現(xiàn)側(cè)滑,由于這里根控制器的左側(cè)返回按鈕沒有重寫,所以它的代理還是有效的,在沒有push出下一個(gè)控制器之前,在根控制器上觸發(fā)側(cè)滑手勢(shì),代理會(huì)去做一些控制
    //我們這里的做法是將系統(tǒng)側(cè)滑手勢(shì)的代理給換了,如果用戶在根控制器觸發(fā)側(cè)滑手勢(shì),這個(gè)手勢(shì)將找不到原來的代理去做一些控制,因此出現(xiàn)了假死的現(xiàn)象
    //因此我們要禁止在根控制器觸發(fā)側(cè)滑手勢(shì),在手勢(shì)的代理方法中可以禁止掉
    //在push出來的控制器上觸發(fā)側(cè)滑,由于我們將系統(tǒng)自帶的側(cè)滑手勢(shì)的代理給換了,系統(tǒng)原本的做法是如果自定義了左側(cè)的返回按鈕,那么這個(gè)側(cè)滑返回功能會(huì)失效,這個(gè)是通過它原本的代理做的一些控制,但是我們將它的代理給換掉了,它找不到原本的代理做控制,因此,側(cè)滑功能海還會(huì)保留

    // 清空手勢(shì)代理,恢復(fù)滑動(dòng)返回功能
    self.interactivePopGestureRecognizer.delegate = self;

}

#pragma mark - UIGestureRecognizerDelegate

// 是否觸發(fā)手勢(shì)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // 在根控制器下 不要 觸發(fā)手勢(shì)
    return self.childViewControllers.count > 1;
}

全屏側(cè)滑


- (void)viewDidLoad {
    [super viewDidLoad];

    // 全屏滑動(dòng)功能
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
    [self.view addGestureRecognizer:pan];

    // 調(diào)用代理方法來控制手勢(shì)什么時(shí)候觸發(fā)(非根控制器的時(shí)候才觸發(fā))
    pan.delegate = self;

    // 讓系統(tǒng)的側(cè)滑手勢(shì)失效
    self.interactivePopGestureRecognizer.enabled = NO;

}

#pragma mark - UIGestureRecognizerDelegate
// 是否觸發(fā)手勢(shì)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // 在根控制器下 不要 觸發(fā)手勢(shì)
    return self.childViewControllers.count > 1;
}

占位視圖的實(shí)現(xiàn)

  • 當(dāng)一個(gè)界面,層次結(jié)構(gòu)已經(jīng)清晰,但是中間某一層位置或者尺寸不確定,可以采用占位視圖

如何修改一個(gè)第三方框架的配置文件

  • 打開工程文件 --->搜索"plug"--->找到一個(gè)圖標(biāo)是藍(lán)色工程文件開頭的文件,點(diǎn)擊之后進(jìn)去找到路徑,然后按照相應(yīng)的路徑去查找,右擊顯示包內(nèi)容

如果發(fā)現(xiàn)在設(shè)置圖片的時(shí)候?qū)D片拖進(jìn)Assets中后在程序中加載不進(jìn)來,可以直接將整個(gè)圖片的問價(jià)夾放到supportingFile的目錄下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玲销,更是在濱河造成了極大的恐慌咖杂,老刑警劉巖啼止,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恋技,死亡現(xiàn)場(chǎng)離奇詭異致份,居然都是意外死亡智袭,警方通過查閱死者的電腦和手機(jī)奔缠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吼野,“玉大人校哎,你說我怎么就攤上這事⊥剑” “怎么了闷哆?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長单起。 經(jīng)常有香客問我抱怔,道長,這世上最難降的妖魔是什么嘀倒? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任屈留,我火速辦了婚禮局冰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灌危。我一直安慰自己康二,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布乍狐。 她就那樣靜靜地躺著赠摇,像睡著了一般固逗。 火紅的嫁衣襯著肌膚如雪浅蚪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天烫罩,我揣著相機(jī)與錄音惜傲,去河邊找鬼。 笑死贝攒,一個(gè)胖子當(dāng)著我的面吹牛盗誊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隘弊,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼哈踱,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了梨熙?” 一聲冷哼從身側(cè)響起开镣,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咽扇,沒想到半個(gè)月后邪财,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡质欲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年树埠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶伟。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怎憋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出九昧,到底是詐尸還是另有隱情盛霎,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布耽装,位于F島的核電站愤炸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掉奄。R本人自食惡果不足惜规个,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一凤薛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诞仓,春花似錦缤苫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谍婉,卻和暖如春舒憾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穗熬。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工镀迂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唤蔗。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓探遵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妓柜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箱季,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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