TAG

RSS订阅

收藏本站

设为首页

当前位置:主页 > 移动开发 > IOS开发 >

UITableView headerViewForSection dequeueReusableHeaderFooter

发布时间:2015-01-09 10:15 类别:IOS开发

我创建了一个自定义的headerView通过-viewForHeaderInSection:方法。 后来,我打算所以我需要修改了一下viewForHeader方法,但我无法访问headerView和它的subViews。 举一个简单的例子,我试图NSLog该viewForHeader在对象-didSelectRowAtIndexPath:但我得到一个(null)结果。 示例代码:
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
 return 75;
}
 
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
 UIView *myHeader = [[UIView alloc] init];
 switch (section) {
  case 0:
   [myHeader setBackgroundColor:[UIColor greenColor]];
   break;
  case 1:
   [myHeader setBackgroundColor:[UIColor redColor]];
   break;
  default:
   break;
 }
 
 UILabel *myLabel = [[UILabel alloc] init];
 [myLabel setFrame:CGRectMake(10, 0, 100, 30)];
 [myLabel setTag:101];
 [myLabel setBackgroundColor:[UIColor clearColor]];
 [myLabel setText:[NSString stringWithFormat:@"Section: %d",section]];
 
 [myHeader addSubview:myLabel]; 
 return myHeader;
}
 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 UITableViewHeaderFooterView *testView = [self.tableView headerViewForSection:indexPath.section];
 NSLog(@"%@",testView); //displays (null)
}
 
我是否需要创建自定义UIViewxib作为headerView? (按照类似的问题,并按照该文档“)
To make the table view aware of your header or footer view, you need to register it. 
You do this using the registerNib:forCellReuseIdentifier: or 
registerClass:forCellReuseIdentifier: method of UITableView.
 
 
-------------------------------------------------------------------------------------------------------------------------
 
1. 我觉得你的问题是可以解决的很轻松了:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UITableViewHeaderFooterView *myHeader = [[UITableViewHeaderFooterView alloc] init];
switch (section) {
 case 0:
  [myHeader setBackgroundColor:[UIColor greenColor]];
  break;
 case 1:
  [myHeader setBackgroundColor:[UIColor redColor]];
  break;
 default:
  break;
}
 
UILabel *myLabel = [[UILabel alloc] init];
[myLabel setFrame:CGRectMake(10, 0, 100, 30)];
[myLabel setTag:101];
[myLabel setBackgroundColor:[UIColor clearColor]];
[myLabel setText:[NSString stringWithFormat:@"Section: %d",section]];
 
[myHeader addSubview:myLabel]; 
return myHeader;
 
} 基本上,你需要UITableViewHeaderFooterView类从viewForHeaderInSection回调返回。在此之后,调用headerViewForSection您的表视图将返回你的对象,而不是零的有效实例。 
 
2. 你需要设置
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
 UIView *myHeader = [[UIView alloc] init];
 myHeader.frame = CGRectMake(0, 0, 100, 75); //ADD THIS AND SET YOUR FRAME
 switch (section) {
  case 0:
   [myHeader setBackgroundColor:[UIColor greenColor]];
   break;
  case 1:
   [myHeader setBackgroundColor:[UIColor redColor]];
   break;
  default:
   break;
 }
 
 UILabel *myLabel = [[UILabel alloc] init];
 [myLabel setFrame:CGRectMake(10, 0, 100, 30)];
 [myLabel setTag:101];
 [myLabel setBackgroundColor:[UIColor clearColor]];
 [myLabel setText:[NSString stringWithFormat:@"Section: %d",section]];
 
 [myHeader addSubview:myLabel]; 
 return myHeader;
}
 
 
 
3. 好了,经过反复试验,我终于解决了我自己的困境。 我做了headerView就像我会做一个单元格。 对于一个单元格,我们将采取UITableViewCelldequeueReusableCellWithIdentifier而... 对于一个页眉/页脚,我们将采取UITableViewHeaderFooterView该dequeueReusableHeaderFooterViewWithIdentifier方法。 剩下的是相当多的概念作为一个单元。 这是我如何解决我的问题(使用默认UITableViewHeaderFooterView:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
 static NSString *HeaderIdentifier = @"header";
 
 UITableViewHeaderFooterView *myHeader = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier];
 if(!myHeader) {
  myHeader = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:HeaderIdentifier];
 }
 
 UIButton *btnUp = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [btnUp setTag:101];
 [btnUp setTitle:@"-" forState:UIControlStateNormal];
 [btnUp setFrame:CGRectMake((tableView.frame.size.width - 35), 10, 30, 30)];
 [myHeader addSubview:btnUp];
 
 [myHeader setFrame:CGRectMake(0, 0, tableView.frame.size.width, 50)];
 [myHeader.textLabel setText:[NSString stringWithFormat:@"Section: %d",section]];
 
 return myHeader;
}
 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 UITableViewHeaderFooterView *theHeaderView = [tableView headerViewForSection:indexPath.section];
 NSLog(@"%@",theHeaderView); // -- great! ... not (null) anymore
 UIButton *theButton = (UIButton *)[theHeaderView viewWithTag:101];
 [theButton setTitle:[NSString stringWithFormat:@"%d",indexPath.row]
    forState:UIControlStateNormal];
 [theHeaderView addSubview:theButton];
}
 
作为选择... 这是我如何解决我的问题(使用自定义UITableViewHeaderFooterView子类): 创建一个UITableViewHeaderFooterView子类,它CustomHeaderView创建该类的视图界面nib文件 在xib,所选的检视与它的身份督察 指定自定义的类CustomHeaderView做性能,合成及在xib连接它们@property (strong, nonatomic) IBOutlet UILabel *lblSomething;@property (strong, nonatomic) IBOutlet UIButton *btnSomething;修改-viewForHeaderInSection:&-didSelectRowAtIndexPath:如:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
 static NSString *HeaderIdentifier = @"header";
 
 CustomHeaderView *myHeader = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier];
 if(!myHeader) {
 // [tableView registerClass:[CustomHeaderView class] forHeaderFooterViewReuseIdentifier:HeaderIdentifier];
  myHeader = [[[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView"
             owner:self
            options:nil] objectAtIndex:0];
 }
 [myHeader.lblSomething setText:[NSString stringWithFormat:@"Section: %d",section]];
 return myHeader;
}
 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 CustomHeaderView *theHeaderView = (CustomHeaderView*)[tableView headerViewForSection:indexPath.section];
 NSLog(@"%@",theHeaderView);
 
 [theHeaderView.lblSomething setAlpha:theHeaderView.lblSomething.alpha-0.1];
 [theHeaderView.btnSomething setTitle:[NSString stringWithFormat:@"%d",indexPath.row]
        forState:UIControlStateNormal];
}
 
的(无关的基础问题)这个例子很简单,只要:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
 return 2;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 switch (section) {
  case 0:
   return 1;
   break;
  case 1:
   return 50;
   break;
 }
 return 0;
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *CellIdentifier = @"Cell";
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
 if(cell == nil) {
  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
          reuseIdentifier:CellIdentifier];
 }
 cell.textLabel.text = [NSString stringWithFormat:@"%d",indexPath.row];
 return cell;
}
 
PS:我知道这个代码不符合任何伟大的目的,但是这仅仅是对他人的例子。
猜你会喜欢....

Copyright © 2015 www.wahenzan.com 哇!很赞 版权所有 浙ICP备14030256号-1 Power by DedeCms

浙公网安备 33010602005986号

声明:本站所有文章除标明原创外,均来自网络转载,版权归原作者所有,如果有侵犯到您的权益,请联系本站删除 网站管理员:758763728

360网站安全检测平台