iOS-仿微信界面的跳轉邏輯
在之前寫聊天項目的時候遇到了這個問題,在微信中我們可以: 從聯系人界面跳到詳情頁面再發起聊天,在聊天界面返回時返回到消息列表界面
這個問題困擾了我很久,這和項目的結構有關,在最初我們的項目結構是如下圖這樣的:
這樣我們的每一個VC都有自己的導航,經過各種實驗,在這情況下,從tabbarController的一個VC跳出去,再跳回tabbarController的另一個VC顯然是不行的(主要是右滑返回很難做到)
所有我就思考,在tabbarController上再加一個導航,平時用VC自己的導航做跳轉,在通過聯系人詳情頁跳到聊天界面時用tabbarController的導航做跳轉,這樣就可以做到微信中的跳轉邏輯了,就像下圖這樣的結構:
通過這種方式有個缺點,我們需要管理2個導航,而且在使用外層的導航做跳轉時,跳轉動畫也和原生的導航跳轉動畫不一樣。這也是我項目中目前使用的方法,當時使用這種方法實現之后也沒有多想,以至于后來遇到了很多坑,這里也不多說了
最近我才想到其實我們可以吧VC的導航去掉,全部使用tabbarController的導航做跳轉,這樣就會簡單很多,而且會避免很多坑,就像下圖這種結構:
這種結構的實現我沒有用在實際項目中,主要是我原來的項目改起來很麻煩,我就懶得改了,我這里寫了一個Demo測試了一下,效果很好,所以寫這篇文章來記錄一下,如果你還有更好的實現的方式,可以在下面留言,我在這里先謝謝了
- 首先創建一個UITabBarController的子類
// 將TabBarController寫成單例類,因為我們需要全局取到它,并設置它的選中VC static ViewController *shareInstance = nil; +(ViewController *)sharedInstance{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (shareInstance == nil) { shareInstance = [[ViewController alloc]init]; } }); return shareInstance; }
- 注意這時在TabBarController中的VC的導航的標題的設置方式發生了改變,我們需要通過下面的方法設置title
// 設置標題 -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; // 這里取到TabBarController,再設置它的標題 [ViewController sharedInstance].title = @"消息"; }
- 跳轉到聊天界面代碼
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ CCDetailViewController *DVC = [[CCDetailViewController alloc]init]; [self.navigationController pushViewController:DVC animated:YES]; }
- 在聊天界面中
// 視圖呈現完成時 -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; // 讓TabBarController選中消息列表界面 [[ViewController sharedInstance] setSelectedIndex:0]; // 清除導航棧中的VC,并加入tabbarController和聊天界面,這樣在右滑手勢時也可直接回到消息列表界面 [self.navigationController setViewControllers:@[[ViewController sharedInstance],self]]; } // 返回按鈕點擊事件 -(void)backClick:(UIButton *)btn{ [self.navigationController popToRootViewControllerAnimated:YES]; }
來自:http://www.jianshu.com/p/2a7b69d510c9
本文由用戶 ShaCTGQ 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!