iOS界面之間的跳轉(zhuǎn)方式基本有3種。?

創(chuàng)新互聯(lián)公司2013年開(kāi)創(chuàng)至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元墨玉做網(wǎng)站,已為上家服務(wù),為墨玉各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18982081108
1、改變window的根視圖
[self.window setRootViewController:VC];
2、模態(tài)彈出
[self presentViewController:nextVC? animated:YES completion:nil];//從當(dāng)前界面到nextVC
[self dismissViewControllerAnimated:YES completion:nil];//從nextVC界面回去
3 用 UINavigationController push 進(jìn)來(lái)和pop回去
[self.navigationController pushViewController:nextVC animated:YES];//從當(dāng)前界面到nextVC這個(gè)界面
[self.navigationController popViewControllerAnimated:YES];//nextVC這個(gè)界面回到上一界面[self.navigationController popToRootViewControllerAnimated:YES];//回到根視圖界面
//self.navigationController.viewControllers 是一個(gè)數(shù)組里面存放所有之前push過(guò)來(lái)的界面,如果想要跳回到指定界面 只需要根據(jù)索引值取出響應(yīng)的界面pop回去
MainViewController *MainVC =self.navigationController.viewControllers[1];? ? [self.navigationController popToViewController:MainVC animated:YES];
嘗試列出所有的頁(yè)面跳轉(zhuǎn)方法,有疏漏的歡迎補(bǔ)充。
1.UINavigationController - push pop (常用)
2.UITabBarController
微信的頁(yè)面就是一個(gè)UITabBarController 和 NavigationController 合用的例子
3.(Modal)UIViewController - presentView
4.addChildViewController
期待補(bǔ)充
假如有多級(jí)頁(yè)面Root-A-B-C的跳轉(zhuǎn),現(xiàn)需要從C返回到A,做法有如下:
有人可能會(huì)說(shuō),直接pop兩下就好了,like this:
?錯(cuò)誤姿勢(shì)?:
可以試一試,要是能達(dá)到效果算我輸!!!
pop到B以后self.navigationController=nil,可以想想是為什么?(頁(yè)面pop出去了,導(dǎo)航欄當(dāng)然也跟著出去了,所以下面這個(gè)pop根本不起作用)
?正確姿勢(shì)一:
由上面錯(cuò)誤姿勢(shì)得到啟發(fā),第二個(gè)pop不是不起作用嗎,那就讓B頁(yè)面去做pop,通知,代理,block都行
總結(jié):雖然能實(shí)現(xiàn),但是很麻煩,還需要寫(xiě)清動(dòng)畫(huà)YES還是NO,不然pop幾個(gè)都有動(dòng)畫(huà)的頁(yè)面會(huì)很突兀。
?正確姿勢(shì)二:
利用導(dǎo)航棧的特性,去除導(dǎo)航棧上面的頁(yè)面
?正確姿勢(shì)三:
與第二個(gè)類(lèi)似,但是是從導(dǎo)航棧獲取vc
個(gè)人推薦使用第三種方法,第二種方法直接去除導(dǎo)航棧上面的頁(yè)面,怕出現(xiàn)問(wèn)題,而第三種方式是拿頁(yè)面(讀比寫(xiě)操作安全)。
在iOS開(kāi)發(fā)中,有時(shí)會(huì)有跳轉(zhuǎn)系統(tǒng)設(shè)置界面的需求,例如提示用戶(hù)打開(kāi)藍(lán)牙或者WIFI,提醒用戶(hù)打開(kāi)推送或者位置權(quán)限等。在iOS6之后,第三方應(yīng)用需要跳轉(zhuǎn)系統(tǒng)設(shè)置界面,需要在URL type中添加一個(gè)Prefs值,如下圖:
需要設(shè)置Prefs
設(shè)置跳轉(zhuǎn)有三種方式,每一種的使用場(chǎng)景都不同。 并且你在跳轉(zhuǎn)到系統(tǒng)中自己應(yīng)用下面設(shè)置的時(shí)候,你的應(yīng)用要提前至少申請(qǐng)了某一個(gè)權(quán)限,如通知,定位等。否則,會(huì)引起崩潰。
當(dāng)iOS系統(tǒng)版本 iOS 10.0 時(shí)
當(dāng)iOS系統(tǒng)版本 =iOS 10.0 時(shí)
當(dāng) iOS系統(tǒng)版本 = iOS7時(shí) , 只能跳轉(zhuǎn)到 系統(tǒng)設(shè)置頁(yè)面
當(dāng) iOS系統(tǒng)版本 = iOS8 ,支持跳轉(zhuǎn)到第三方應(yīng)用的設(shè)置界面中
使用prefs:root=bundleID ,bundleID是你第三方應(yīng)用工程的唯一ID
局限性:只支持iOS8,iOS9系統(tǒng),在iOS10系統(tǒng)上,不會(huì)跳轉(zhuǎn)。
在iOS7系統(tǒng)上,僅僅只是跳轉(zhuǎn)到設(shè)置應(yīng)用,不推薦使用。
UIApplicationOpenSettingsURLString字段,是在iOS8上才提供的,支持iOS8,iOS9,iOS10系統(tǒng),推薦使用。
跳轉(zhuǎn)。
而 prefs:root=bundleID和 prefs:root=服務(wù) 都將不起作用。
方式一:prefs:root=某項(xiàng)服務(wù) 適用于 小于 iOS10的系統(tǒng);
方式二:prefs:root=bundleID 適用于 大于等于iOS8系統(tǒng),小于iOS10的系統(tǒng)
方式三:UIApplicationOpenSettingsURLString 適用于 大于等于iOS8的系統(tǒng)
跳轉(zhuǎn)到根視圖并跳轉(zhuǎn)到第一個(gè)tabbar第一個(gè)頁(yè)面
//?直接跳轉(zhuǎn)到跟視圖
self
.navigationController.tabBarController.hidesBottomBarWhenPushed=
NO
;
self
.navigationController.tabBarController.selectedIndex=
;??
//0
//?先跳轉(zhuǎn)到自身tabbar主頁(yè),再跳轉(zhuǎn)到第一個(gè)tabbar主頁(yè)?(push出來(lái)的走這個(gè)方法)
for
(
UIViewController
*vc?
in
self
.navigationController.viewControllers)?{
if
([vc?isKindOfClass:[TrainingProgramTableViewController?
class
]])?{
[
self
.navigationController.tabBarController?setSelectedIndex:
];
[
self
.navigationController?popToRootViewControllerAnimated:
NO
];
}
}
在iOS開(kāi)發(fā)中,頁(yè)面跳轉(zhuǎn)一般有兩種方式:
在SDK開(kāi)發(fā)中,由于需要減小侵入性,通常會(huì)使用modal方式彈出SDK的頁(yè)面,那么默認(rèn)喚起的動(dòng)畫(huà)就是從下到上。現(xiàn)在有一個(gè)需求,需要從右到左喚起SDK的頁(yè)面,所以我們需要用到轉(zhuǎn)場(chǎng)動(dòng)畫(huà),將present的動(dòng)畫(huà)改成從右到左,也就是以Push方式實(shí)現(xiàn)Present跳轉(zhuǎn)。
實(shí)現(xiàn)模態(tài)的轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的步驟,大概分以下幾步:
下面按照這個(gè)步驟來(lái)實(shí)現(xiàn)功能
創(chuàng)建一個(gè)類(lèi) WBHCPushAnimatedTransition 來(lái)封裝轉(zhuǎn)場(chǎng)動(dòng)畫(huà)
實(shí)現(xiàn)系統(tǒng)的 UIViewControllerAnimatedTransitioning 協(xié)議
實(shí)現(xiàn)present動(dòng)畫(huà),實(shí)際就是使用UIView動(dòng)畫(huà)來(lái)改變 fromVC 和 toVC 的 view 的位置
實(shí)現(xiàn)dismiss動(dòng)畫(huà),和上面的present動(dòng)畫(huà)相反,將fromVC 和 toVC 的 view 的位置還原
這樣,整個(gè)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的封裝就完成了,下面來(lái)實(shí)現(xiàn)代理
在要present出來(lái)的vc中實(shí)現(xiàn)系統(tǒng)代理 UIViewControllerTransitioningDelegate
這樣的話(huà),整個(gè)功能就基本實(shí)現(xiàn)了
但是,體驗(yàn)上還缺少一點(diǎn):沒(méi)有側(cè)滑返回。所以,接下來(lái),我們實(shí)現(xiàn)側(cè)滑返回的交互轉(zhuǎn)場(chǎng)
創(chuàng)建一個(gè)繼承自 UIPercentDrivenInteractiveTransition 的類(lèi) WBHCPopInteractiveTransition 來(lái)封裝交互轉(zhuǎn)場(chǎng)
為傳入的vc添加拖動(dòng)手勢(shì)
拖動(dòng)手勢(shì)是加在全屏上的,我們需要將它限制到屏幕左側(cè),這樣才是側(cè)滑返回,否則是全屏返回
核心是處理手勢(shì)交互轉(zhuǎn)場(chǎng)的過(guò)程,我們需要更新轉(zhuǎn)場(chǎng)百分比 updateInteractiveTransition ,標(biāo)記 完成轉(zhuǎn)場(chǎng) finishInteractiveTransition 和取消轉(zhuǎn)場(chǎng) cancelInteractiveTransition
這樣,整個(gè)交互轉(zhuǎn)場(chǎng)的封裝就完成了,下面來(lái)實(shí)現(xiàn)代理
在要dismiss消失的vc中實(shí)現(xiàn)系統(tǒng)代理 UIViewControllerTransitioningDelegate
這樣的話(huà),整個(gè)側(cè)滑返回的功能就實(shí)現(xiàn)了
至此,我們基本上就實(shí)現(xiàn)了以Push方式實(shí)現(xiàn)Present跳轉(zhuǎn),同時(shí)可以像原生導(dǎo)航一樣進(jìn)行側(cè)滑返回
分享標(biāo)題:ios開(kāi)發(fā)頁(yè)面跳轉(zhuǎn)頁(yè)面,ios網(wǎng)頁(yè)自動(dòng)跳轉(zhuǎn)
網(wǎng)頁(yè)URL:http://chinadenli.net/article4/dsgcsoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、云服務(wù)器、做網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)