iPhone - 固定(tableHeaderView),在滚动单元格时分组UITableView

时间:2011-03-06 07:29:43

标签: iphone objective-c uiview uitableview

我有UIView分组UITableView,我希望UIView保持固定tableHeaderView,而不是在滚动{{1}时移动}}的。因此,滚动时我希望单元格位于UITableViewCell后面。

这是我目前用于将UIView添加到UIView的代码:

Interface.h:

UIViewController

Implementation.m(在viewDidLoad中):

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

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

不确定这是否是将// 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正下方固定,同时单元格自由移动并在标题后面移动。如果这一切都有意义,或者您是否需要更多代码以确定我想要实现的目标,请告诉我。

3 个答案:

答案 0 :(得分:7)

详细说明Paramasivan的答案。

我不使用nib文件创建视图,因此我将以编程方式创建视图来描述代码。

您需要做的是,只需将标题视图放在顶部,然后将大小的桌面视图放在顶部。

示例:

- (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,并且不会使用tableview滚动。

如果你将myHeaderView添加为tableview headerView,我会一直使用tableview滚动。

在您的示例中,使用nib,您可以在“viewDidLoad”函数中调整框架的大小,以便UITableView从位置(0,myHeaderView.frame.size.height)开始。

EDIT *终于找到了如何使用4个空格进行代码格式化:)

答案 1 :(得分:2)

您可以创建自定义UIViewController并自行实施UITableViewDelegateUITableViewDataSource协议。

UITableView添加到UIViewController,然后只需调用UIView方法,即可在UITableView之上添加自定义-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];

您还可以使用位于UITableView顶部的UIImageView下方的UIView,并使图像以透明方式开始并淡入UIView的颜色。这样可以看出细胞正在UIView后面。

这在代码中比在Interface Builder中更容易完成。根据我的经验,在其他视图之上添加UIView对象会使Interface Builder特别困惑,特别是如果它是UITableView。由于某种原因,它也会大大降低Interface Builder的速度。

答案 2 :(得分:0)

您可以将视图放在UITableView上方,而不是将其作为标题视图放在里面。