2011-10-16 64 views
0

爲什麼tableview的頁眉和頁腳總是停留在視圖層次結構的頂部,而不是表格的單元格?UITableView:頁眉和頁腳視圖的繪畫行爲

這裏是我的了:

  • 自定義單元格的表視圖,頁腳和頭
  • 一個導航欄在右邊
  • 一個菜單按鈕當用戶點擊菜單 - 按鈕,半透明菜單(UIView)從頂部淡入,但不在導航欄上,僅在我的tableview控制器的視圖上
  • 當用戶選擇菜單按鈕時,菜單將滑回(0, -menuHeight)
  • 但是,當菜單是在頭部,這個菜單區域是我的頭

後面我掛靠在菜單上我tableviewcontroller認爲,東陽我想要的導航欄百達可見。將其錨定在導航欄上的解決方案解決了標題視圖的問題,但涵蓋了導航欄。

有沒有人有一個想法如何解決這個問題?爲什麼單元格繪製正確?

回答

1

您應該不直接干涉UITableView的內部視圖層次結構。 Apple可自由訂購表格視圖的子視圖(並在未來的版本中進行更改)。

相反,將表視圖和菜單視圖放入一個公共容器視圖,並使後者成爲視圖控制器的主視圖。這樣,您可以確定您的菜單視圖將始終位於表格視圖之上。

+0

好了 - 我改變了我的設計 - 但現在我的桌子上沒有觸碰事件。 - >請在下面看到我的新答案 – netshark1000

+0

您不應該添加包含問題的答案。改爲編輯您的原始問題。我也不相信將self.tableView重置爲另一個視圖是一個好主意。 AFAIK,UITableViewController的tableView屬性默認返回它的視圖插座。換句話說,不要再使用UITableViewController。改用普通的UIViewController。 –

+0

好的 - 你的意思是說,我應該創建一個新的viewController並添加tableviewcontrollers視圖到它? – netshark1000

0

我改變了我的設計,但現在我沒有在我的桌子上看到觸摸事件。

但是,當我加入這個方法 - 我看到的,我碰了tableviewcontroller ...

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"ShieldingViewController received touch"); 
    [self.buttonMenu shieldingViewTouched]; 
} 

這是我改變了:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y = 0; 

    UIView *rootView = [[UIView alloc] initWithFrame:viewFrame]; 
    rootView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 


    // Setup the table view 
    UITableView *newTableView = [[UITableView alloc] initWithFrame:viewFrame style:self.tableView.style]; 
    newTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    newTableView.backgroundColor = [UIColor darkGrayColor]; 


    UIView *menuLayerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]; 


    self.tableView = newTableView; 

    [rootView addSubview:self.tableView]; 
    [rootView addSubview: menuLayerView]; 
    self.view = rootView; 

    [[CustomNavigationController instance] setCurrentViewForMenu: menuLayerView]; 
    [[CustomNavigationController instance] showMenuInNavigationBarForController:self]; 

    [newTableView release]; 
    [menuLayerView release]; 
    [rootView release]; 
}