1.導(dǎo)航控制器自帶了滑動(dòng)返回(iOS7)
2.但是設(shè)置界面沒有滑動(dòng)返回功能
3.恢復(fù)滑動(dòng)返回
分析:為什么滑動(dòng)返回失效—>覆蓋了系統(tǒng)的返回按鈕—>怎么才能讓滑動(dòng)返回失效
滑動(dòng)返回實(shí)現(xiàn)原理:添加pan手勢
怎么讓手勢失效:代理方法可以讓界面不能與用戶交互....
分析發(fā)現(xiàn)系統(tǒng)是通過代理讓滑動(dòng)返回失效的
解決辦法:清空代理
4.全屏滑動(dòng)返回
系統(tǒng)自帶的是屏幕邊緣滑動(dòng)返回,與需求不符
我們要自己寫一個(gè)滑動(dòng)返回? ?太麻煩
系統(tǒng)已經(jīng)有了,把系統(tǒng)的拿過來改一下
5.怎么修改?
先找到對(duì)應(yīng)的手勢,和手勢的代理, ?怎么找??
滑動(dòng)返回是導(dǎo)航控制器的功能,那么手勢應(yīng)該在導(dǎo)航控制器里面
在導(dǎo)航控制器頭文件中搜索gesture,我們找到interactivePopGestureRecognizer
我們通過打印它可以得到一些信息
; target= <(action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7fb413d0c460>)>>
在信息中我們可以找到代理,而且知道系統(tǒng)的手勢是UIScreenEdgePanGestureRecognizer邊緣手勢
6.怎么修改為全屏滑動(dòng)
修改手勢方法為UIPanGestureRecognizer
清除系統(tǒng)的邊緣滑動(dòng)手勢
手勢方法調(diào)用系統(tǒng)的滑動(dòng)返回方法,handleNavigationTransition:
設(shè)置代理為自己,不讓代理方法失效
target的action滑動(dòng)返回功能
// 干掉系統(tǒng)邊緣滑動(dòng)手勢
self.interactivePopGestureRecognizer.enabled=NO;
// 創(chuàng)建UIPanGestureRecognizer:滑動(dòng)返回功能
idtarget =self.interactivePopGestureRecognizer.delegate;
UIPanGestureRecognizer*pan = [[UIPanGestureRecognizeralloc]initWithTarget:targetaction:@selector(handleNavigationTransition:)];
[self.viewaddGestureRecognizer:pan];
// 設(shè)置代理,控制手勢什么時(shí)候觸發(fā)
pan.delegate=self;
// 每次觸發(fā)手勢,詢問下代理是否觸發(fā)手勢
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
// 判斷下是否是非控制器,如果是非根控制器就返回YES
returnself.childViewControllers.count>1;
}