Rumah > Soal Jawab > teks badan
请问微信中点击通讯录,然后选择一个好友,然后点击发送消息之后,返回的还是主界面?这个功能是怎么实现的呢?看他点击发送消失之后是pop到了通讯录的好友列表,然后在push进去的,我的实现方式是先popToRoot 然后在切换tabbar选中,感觉这样看起来并不丝滑~求助
伊谢尔伦2017-04-18 09:37:53
Untuk mengelakkan berbilang antara muka sembang dan bersarang dalam, dan untuk menyatukan tabiat pengendalian, WeChat dan banyak apl IM mengehadkan "sebarang kemasukan ke dalam antara muka sembang harus dilakukan daripada senarai perbualan Beberapa apl yang saya buat sebelum ini berada dalam The yang sama berlaku untuk membuka antara muka sembang.
Terdapat kaedah awam untuk membuka antara muka sembang, yang boleh dipanggil dari mana-mana antara muka. Atau tentukan laluan untuk antara muka sembang.
Contohnya: + [ChatViewController openWithUser:(User *)user];
Ambil struktur apl WeChat sebagai contoh. Terdapat navigasi di bahagian atas, tabBar di bahagian bawah dan hanya satu senarai perbualan. Logik membuka antara muka sembang adalah kira-kira seperti berikut:
if (currentChatViewController && currentChatViewController.user.userId == user.userId) {
// 如果这个人的聊天界面已经打开了
if (conversationListViewController.navigationController.viewControllers.count > 2) {
// 不在聊天界面:比如在查看资料界面,就返回到聊天界面
[conversationListViewController popToViewController:currentChatViewController animated:YES];
}
} else {
// 退出当前的聊天界面,animated: NO
if (conversationListViewController.navigationController.viewControllers.count > 1) {
[conversationListViewController.navigationController popToRootViewControllerAnimated:NO];
}
ChatViewController *chatVC = [[ChatViewController alloc] initWithUser:user];
[conversationListViewController.navigationController pushViewController:chatVC animated:YES];
}
tabBarViewController.selectedIndex = 0;
Untuk mendapatkan pengawal akar, senarai sesi dan tetingkap sembang semasa, anda boleh menggunakan pembolehubah global atau gunakan kod untuk menyemak:
UITabBarController *tabBarViewController = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *conversationListViewController = tabBarViewController.viewControllers.firstObject;
ChatViewController *currentChatViewController =
(ChatViewController *)(conversationListViewController.navigationController.viewControllers.count > 1 ?
conversationListViewController.navigationController.viewControllers[1] : nil);