2014-02-27 104 views
1

我有一個tableviewcontroller和tableviewcontroller的相應rowclick我想顯示相應的行細節內容的細節。限制沒有故事板的uitabbarviewcontroller ios7的視圖高度

行詳細視圖如下將有一個固定的內容:

  1. 部首
  2. 標題下面頭
  3. 圖片相關標題
  4. 這裏我要顯示的相應視圖uitabbarcontroller tab按鈕

在上述幾點來自點1-3的內容將覆蓋將被修復的視圖控制器頁面的一半&視圖控制器的下半部分將具有第四點,即相應的tab鍵的視圖,其將根據爲各個選項卡創建的視圖而改變。

我無法找到任何解決方案來保持視圖的上半部分固定。以及如何將tabbar的視圖限制在屏幕的下半部分。

我正在做這個應用程序沒有使用故事板

搜了很多,但沒有得到任何解決方案。

請提供一些示例代碼或教程,如果有的話。

以下是我真正想要的圖像,因爲我在android中創建了相同的圖像。

抱歉,需要模糊圖像的內容。

enter image description here

在按照上述圖像是事情要固定:

  1. 在頂部的藍色條是報頭,這將保持固定。
  2. 標題下方的棕色條和標題下面的白色圖片也是固定的。
  3. 圖像下面的四個按鈕是IOS中將出現在屏幕底部的tabbar按鈕。
  4. 下方的tabbar按鈕是包含第一個tabbar按鈕的內容的視圖。

我的問題是我想要修復以上兩點中的前兩個,並且包含各個tabbarbuttons視圖的viewcontroller應該可以在屏幕的其餘部分用4個tabbar按鈕看到。

所以,如果我點擊任何選項卡按鈕,只有其屏幕下半部佔據的視圖將改變&上半部分將保持靜態(固定)。

希望我的解釋清楚地表明瞭對這個問題的一些懷疑。基於什麼@Simon麥克勞林建議

---- EDITED SOLUTION,下面是代碼:

我已經實現在我所編寫的代碼實現我的方案的功能。

-(void)loadShowDetailsTabBarController 
{ 
    ConceptViewController *conceptViewController; 
    CastViewController *castViewController; 
    ShowDetailsFeedbackViewController *showDetailsFeedbackViewController; 
    PromosViewController *promoViewController; 

    UIImage *conceptBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"]; 
    UIImage *conceptBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"]; 


    UIImage *castBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"]; 
    UIImage *castBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"]; 

    UIImage *feedbackBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"]; 
    UIImage *feedbackBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"]; 

    UIImage *promoBtn = [UIImage imageNamed:@"showdetailstabidle_btn_bg.png"]; 
    UIImage *promoBtnSelected = [UIImage imageNamed:@"showdetailstabselected_btn_bg.png"]; 

    conceptBtn = [conceptBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    conceptBtnSelected = [conceptBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

    castBtn = [castBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    castBtnSelected = [castBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

    feedbackBtn = [feedbackBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    feedbackBtnSelected = [feedbackBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

    promoBtn = [promoBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    promoBtnSelected = [promoBtnSelected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    { 
     conceptViewController = [[ConceptViewController alloc] initWithNibName:@"ConceptViewController_iPad" bundle:nil]; 

     castViewController = [[CastViewController alloc] initWithNibName:@"CastViewController_iPad" bundle:nil]; 

     showDetailsFeedbackViewController = [[ShowDetailsFeedbackViewController alloc] initWithNibName:@"ShowDetailsFeedbackViewController_iPad" bundle:nil]; 

     promoViewController = [[PromosViewController alloc] initWithNibName:@"PromosViewController_iPad" bundle:nil]; 
    } 
    else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    { 
     conceptViewController = [[ConceptViewController alloc] initWithNibName:@"ConceptViewController" bundle:nil]; 

     castViewController = [[CastViewController alloc] initWithNibName:@"CastViewController" bundle:nil]; 

     showDetailsFeedbackViewController = [[ShowDetailsFeedbackViewController alloc] initWithNibName:@"ShowDetailsFeedbackViewController" bundle:nil]; 

     promoViewController = [[PromosViewController alloc] initWithNibName:@"PromosViewController" bundle:nil]; 

    } 

    conceptViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"CONCEPT" image:conceptBtn selectedImage:conceptBtn]; 

    castViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"CAST" image:castBtn selectedImage:castBtnSelected]; 

    showDetailsFeedbackViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"FEEDBACK" image:feedbackBtn selectedImage:feedbackBtnSelected]; 

    promoViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"PROMO" image:promoBtn selectedImage:promoBtnSelected];/**/ 

    UITabBarController *showDetailstabVC = [[UITabBarController alloc] init]; 

    showDetailstabVC.viewControllers = [NSArray arrayWithObjects:conceptViewController,castViewController,showDetailsFeedbackViewController,promoViewController, nil]; 

    showDetailstabVC.view.frame = CGRectMake(0, 250, screenSize.width, screenSize.height-250); 

    self.view.window.rootViewController = showDetailstabVC; 

    [self.view addSubview:showDetailstabVC.view]; 
} 

請讓我知道我的代碼是否正確?

我可以查看我想要的內容。

但是現在的問題是,當我在使用TabBar按鈕我得到以下錯誤,請點擊:

EXC_BAD_ACCESS(代碼= exc_i386_gpflt)

不是在調試屏幕,應用程序停止給出的錯誤在的main.m以下行:

返回UIApplicationMain(的argc,argv的,零,NSStringFromClass([AppDelegate類]));

+0

好吧,我相信這是一個笑話或你的巨魔。如何在上帝的愛中解釋任何事情? –

+1

@simon我對圖像的內容進行了模糊處理,並在上傳的模糊圖像的圖像下面放置瞭解釋。請閱讀圖像的說明。 –

+0

我做了,它沒有什麼意義 –

回答

1

好吧,原來你試圖實現的是一個垂直分割的UIViewController。上半部分是靜態的,下半部分包含UITabbarController,將顯示UIViewControllers,這將只佔用UITabbar和靜態視圖之間的空間。

我認爲這可以通過使UITabbarController一個孩子來完成,但我可能是錯的。通過簡單地設置框架,我在屏幕上有3個孩子UIViewController。您上面已經說過,這對您不起作用,所以我看到還有2個選項。

  1. 您創建的所有標籤內容要小一些。比如說頂視圖高度是100px。在標籤中的UIViewController中,只需將UITableView(或視圖或任何內容)的框架設置爲從100px開始,以獲取其Y值。在我看來,這是一個相當糟糕的解決方案,但它需要最少的努力。

  2. 您創建了一個「主」UIViewController頂部有一個靜態部分,水平滾動UIScrollView啓用了分頁功能。並添加個人UIViewController的子視圖控制器。不知道你是否可以創建一個Tabbar並監聽事件,並使用它編程地滾動它,或者如果你必須創建自己的UIView,看起來像Tabbar,並將其上的按鈕向左/向右滾動。

第二種方法是一個相當常見的事情。我已經開發了一些已經完成它的應用程序,並在網上看到了很多關於如何實現它的帖子。像這樣:How do I put viewController's into a UIScrollView。它只需要以增加X值的方式添加子ViewController並將scrollViews內容大小設置爲總數。打開分頁,關閉垂直滾動。

+0

好吧將張貼圖像我是多麼希望它,因爲我已經在android中創建相同,並希望在ios中創建相同種類的視圖 –

+0

@NiranjanBalkrishnaPrajapati我編輯了我的答案 –

+0

我試過並能夠設置tabbarcontroller和頂部部分視圖在一個屏幕上,但現在的問題是當我點擊標籤欄按鈕,我得到以下錯誤: exc_bad_access(code = exc_i386_gpflt) 錯誤未顯示在調試區域,但應用程序停止在main.m 這是應用程序停止的行: @autoreleasepool { return UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class])); } –

相關問題