iOS-仿微信界面的跳轉邏輯

ShaCTGQ 8年前發布 | 11K 次閱讀 iOS開發 移動開發

在之前寫聊天項目的時候遇到了這個問題,在微信中我們可以: 從聯系人界面跳到詳情頁面再發起聊天,在聊天界面返回時返回到消息列表界面

這個問題困擾了我很久,這和項目的結構有關,在最初我們的項目結構是如下圖這樣的:

這樣我們的每一個VC都有自己的導航,經過各種實驗,在這情況下,從tabbarController的一個VC跳出去,再跳回tabbarController的另一個VC顯然是不行的(主要是右滑返回很難做到)

所有我就思考,在tabbarController上再加一個導航,平時用VC自己的導航做跳轉,在通過聯系人詳情頁跳到聊天界面時用tabbarController的導航做跳轉,這樣就可以做到微信中的跳轉邏輯了,就像下圖這樣的結構:

通過這種方式有個缺點,我們需要管理2個導航,而且在使用外層的導航做跳轉時,跳轉動畫也和原生的導航跳轉動畫不一樣。這也是我項目中目前使用的方法,當時使用這種方法實現之后也沒有多想,以至于后來遇到了很多坑,這里也不多說了

最近我才想到其實我們可以吧VC的導航去掉,全部使用tabbarController的導航做跳轉,這樣就會簡單很多,而且會避免很多坑,就像下圖這種結構:

這種結構的實現我沒有用在實際項目中,主要是我原來的項目改起來很麻煩,我就懶得改了,我這里寫了一個Demo測試了一下,效果很好,所以寫這篇文章來記錄一下,如果你還有更好的實現的方式,可以在下面留言,我在這里先謝謝了

  1. 首先創建一個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;
    }
  2. 注意這時在TabBarController中的VC的導航的標題的設置方式發生了改變,我們需要通過下面的方法設置title
    // 設置標題
    -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     // 這里取到TabBarController,再設置它的標題
     [ViewController sharedInstance].title = @"消息";
    }
  3. 跳轉到聊天界面代碼
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     CCDetailViewController *DVC = [[CCDetailViewController alloc]init];
     [self.navigationController pushViewController:DVC animated:YES];
    }
  4. 在聊天界面中
    // 視圖呈現完成時
    -(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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!