[英]iOS: Showing the UIViewControllers when UITabBar and UINavigationBar buttons cliked
我是iOS的新手,因為我的項目取決於導航和UITabBar控制器。我已完成以下步驟
UITabBar包含4個按鈕,導航欄包含2個按鈕,即所有屏幕都通用1)首先,我已使用UITabBar控制器並向其中添加了四個按鈕2)對於UITabBar的每個按鈕,我都添加了導航控制器標簽欄按鈕所有視圖均顯示正常,並進入UITabBar條形按鈕我正面臨以下問題
假設我在UITabBar屏幕“ A”中,我單擊了導航欄按鈕,將導航屏幕前為“ Navscreen”,這意味着當我單擊Tabbar按鈕“ B”並返回UITabBar按鈕時,“ A”包含“ Navscreen” “ A”仍顯示“導航屏幕”
為了避免在“ Navscreen”視圖控制器中出現這種情況,我在視圖中添加了以下代碼
-(void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSUInteger indexOfTab = [tabBarController.viewControllers
indexOfObject:viewController];
NSLog(@"Tab index = %u (%u)", indexOfTab);
if (indexOfTab==0)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
FirstViewController *firstview =
(FirstViewController *) [storyboard
instantiateViewControllerWithIdentifier:@"home"];
[self.navigationController pushViewController:firstview
animated:YES];
}
else if (indexOfTab==1)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
secondviewcontroller *secondview =
(secondviewcontroller *) [storyboard
instantiateViewControllerWithIdentifier:@"Medremainder"];
[self.navigationController pushViewController:secondview animated:NO];
}
if (indexOfTab==2)
{
UIStoryboard *storyboard = [UIStoryboard
storyboardWithName:@"Main" bundle:nil];
mymedView *mymed_view =
(mymedView *) [storyboard
instantiateViewControllerWithIdentifier:@"mymed"];
[self.navigationController pushViewController:mymed_view
animated:NO];
}
if (indexOfTab==3)
{
UIStoryboard *storyboard = [UIStoryboard
storyboardWithName:@"Main" bundle:nil];
Event_view *event_view =
(Event_view *) [storyboard
instantiateViewControllerWithIdentifier:@"Event_view"];
[self.navigationController pushViewController:event_view
animated:NO];
}
}
但是在這種情況下,當單擊“導航屏幕”時,當我單擊UITabBar“ B”時,我就可以獲取UITabBar屏幕。如果再次單擊UITabBar“ A”,我可以看到“ A”,並且當我單擊UITabBar按鈕時, B“應用程序崩潰。我是ios新手,如果我做錯了任何事情,請幫助我,請提供正確的解決方案。
在您的didSelectViewController:
,您似乎多次將新控制器推到self.navigationController
? 每次您選擇一個選項卡時,此代碼都會將另一個從情節提要中加載的控制器推入已存在的控制器之上。 這可能是使您的導航項目混亂的原因。
您是否不應該只為每個選項卡分配一次單獨的導航控制器,而這完全是自動的?
在情節提要/代碼中,為每個選項卡分配單獨的導航控制器。 在每個導航控制器中,根據您從情節提要中為每個選項卡加載的內容,使用根控制器創建它。 您只需在主控制器中的某個位置創建一次即可。 然后將導航控制器分配到情節提要或代碼集中的單獨選項卡中,將控制器陣列設置為您創建的導航控制器的陣列。
然后,它應該全部自動完成,而無需實現didSelectViewController:
完全沒有問題,因為每個選項卡只會簡單地顯示相應的導航控制器及其關聯的導航欄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.