2011-03-06 179 views
3

我有一個分組UITableView一個UIView,我想的UIView留作爲固定tableHeaderView,而不是滾動UITableViewCell的時移動。因此,當滾動時,我希望單元格位於UIView之後。iPhone - 固定(tableHeaderView)與分組的UITableView滾動時細胞

這是我目前使用加我UIViewUIViewController代碼:

Interface.h:

@interface MyAccountVC : UIViewController <UITableViewDelegate, UITableViewDataSource> { 
    HeaderView *myHeaderView; // Inherits from UIView 
    UITableView *tv; 
} 

@property (nonatomic, retain) IBOutlet UITableView *tv; 
@property (nonatomic, retain) HeaderView myHeaderView; 

Implementation.m(在viewDidLoad中):

// Set up the table's header view based on our UIView 'HeaderView' outlet. 
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:nil options:nil]; 

for (id currentObject in topLevelObjects) { 
    if ([currentObject isKindOfClass:[UIView class]]) { 
     self.myHeaderView = (HeaderView *)currentObject; 
     break; 
    } 
} 

CGRect newFrame = CGRectMake(0.0, 0.0, self.tv.bounds.size.width, self.myHeaderView.frame.size.height); 
self.myHeaderView.frame = newFrame; 

self.tv.tableHeaderView = self.myHeaderView; 

不知道這是否將myHeaderView添加到UITableView的最佳方式,但它似乎工作正常,我可以簡單地添加如果需要,可以將上面的代碼添加到任何UIViewController並使用UITableView重新使用頭。

當我滾動頁眉時,頁眉隨着單元格移動,但我希望頁眉被固定在頂部UINavigationBar的下方,而單元格可以自由移動並在頁眉後面移動。請讓我知道這是否合理,或者您是否需要更多代碼才能確定我想實現的目標。

回答

7

只是闡述Paramasivan的答案。

我不用nib文件創建視圖,所以我將描述代碼,假設您以編程方式創建視圖。

你需要做的是,只需在頂部放置標題視圖,並在頂部放置一個大小的tableview。

例子:

- (void) loadView { 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)]; 
    self.view = view; 

    self.myHeaderView = ... // use your init function, with rect something like (0,0,320,50) 
    [view addsubview:self.myHeaderView]; 

    self.tv = [[UITableView alloc] init... // with frame like (0,50,320,430) 
    [view addSubview:self.tv]; 

    // release everything 
} 

這樣,你有一個UIView,在視圖的頂部總是,並且不會實現代碼如下滾動。

如果你添加myHeaderView作爲tableview headerView,它總會隨着我認爲的tableview滾動。

在您的示例中,使用nib,您可以調整「viewDidLoad」函數中的框架大小,以便UITableView從位置(0,myHeaderView.frame.size.height)開始。

編輯*終於想通了如何使用4位代碼格式化:)

+0

我也是從.xib完成的。我在頂部附近放置了一個UIView,然後添加了一個UITableView來填充它下面的空間。如果你允許輪換,只需要小心按照你想要的方式設置自動修復掩碼。 – PengOne 2011-03-15 17:33:39

0

您可以將視圖放在UITableView的上方,而不是將其放在headerview中。

+0

請您詳細說明一下嗎? – fuzz 2011-03-07 00:01:14

+0

是的,UITableView上方有一個UIView。以編程方式說[self.view addSubview:viewHeader]; [self.view addSubview tableViewList]; – 2011-03-07 11:50:51

+0

如果我這樣做,那麼UIView將覆蓋第一對單元格。 – fuzz 2011-03-09 23:14:17

2

你可以創建一個自定義UIViewController貫徹UITableViewDelegateUITableViewDataSource協議自己。

添加UITableViewUIViewController然後添加自定義UIViewUITableView的頂部簡單地通過調用-addSubview:(UIView *)view方法。設置UITableView內容並滾動插入屬性。

實施例:

[tableView setContentInset:UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f)]; 
[tableView setContentOffset:CGPointMake(0.0f, 44.0f)]; 
[[self view] addSubview:tableView]; 

UIView *viewAboveTableView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)]; 
[[self view] addSubview:viewAboveTableView]; 

您也可以使用UIView即上的UITableView的頂部和具有開始時透明,淡入到UIView的顏色的圖像下方的UIImageView。這會使得電池出現在UIView之後。

這在代碼中比在Interface Builder中更容易完成。根據我的經驗,在其他視圖的頂部添加UIView對象會混淆Interface Builder,特別是如果它是UITableView。出於某種原因,它也會顯着減慢Interface Builder的速度。