2009-08-16 43 views
1

首先有一點背景信息:非滾動tableViewHeader

我有UIViewController包含UITableView。在loadView方法中(在表初始化之後),我將UIViewControllers視圖設置爲table view:self.view = tableView;

我想要的是屏幕頂部(在UITableView之前)的視圖,它在滾動時不會與其餘的表視圖一起滾動。我已經嘗試將我的UIView添加到表視圖的tableViewHeader,它正確顯示,但與表的其餘部分滾動。

有沒有解決這個問題的簡單方法?無論哪種方式,對解決方案的任何提示都非常感謝。

編輯:

試想想起來了,我要的是像股票應用程序,其中底部是靜止的,屏幕的其餘部分是一個UITableView。唯一的區別是我想要屏幕頂部的固定部分。

回答

0

是否有你將UIViewController的視圖設置爲UITableView的原因?爲什麼不把UITableView作爲子視圖處理?這將允許你在UITableView之上添加任何其他視圖,以UIViewController視圖作爲背景的空白空間等。

+0

你有什麼建議?我已經嘗試將UIView和UITableView添加到UIViewController中:[self.view addSubview:headerView];和[self.view addSubview:tableView];每個視圖都使用適當的框架進行了初始化。當我這樣做時,程序崩潰,調試器啓動顯示:加載95186堆棧幀... – Erik 2009-08-16 09:14:18

+0

嗯,發現錯誤。我早些時候嘗試了你的方法,正如我所說的那樣,整件事情都崩潰了。那是因爲我忘了放[super loadView];在我的loadView方法。所以我會就此給你正確的答案,因爲你的方法是我最終會用到的。 – Erik 2009-08-16 10:10:00

1

由於kmit已經指出,您可以輕鬆地添加多個子視圖你的看法。因此,不要將表視圖直接設置爲self.view,而是創建一個空白UIView(作爲容器),並將表視圖和標題視圖添加爲該視圖的子視圖。您可以通過框架屬性來控制視圖的範圍。一個簡單的例子:

- (void)loadView { 
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    [view setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 

    // header view 
    HeaderView* headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 182)]; 
    self.headerView = headerView; // in case you need the reference later on 
    [view addSubview:headerView]; 
    [headerView release]; 

    // table view 
    UITableView* tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 182, 320, 186) style:UITableViewStylePlain]; 
    [tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 
    tableView.delegate = self; 
    tableView.dataSource = self; 
    [view addSubview:tableView]; 
    self.tableView = tableView; 
    [tableView release]; 

    self.view = view; 
    [view release]; 
} 

作爲替代手動創建包含UIView,你可以在你loadView開始執行調用[super loadView]