1

ボタンとイメージ ビューを含むヘッダー ビューを追加しましたが、変更されたイメージのイメージ ビューを識別できません。

私のコードは次のとおりです。

私の HaderView クラス .h ファイル(HeaderSection.h)

#import <UIKit/UIKit.h>

@interface HeaderViewSection : UIView
@property(nonatomic,retain)UIButton *btn;
@property(nonatomic,retain)UIImageView *arrow_img;
@end

私の HaderView クラス .m ファイル(HeaderSection.m)

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor brownColor];

        _arrow_img=[[UIImageView alloc]init];
        _arrow_img.frame=CGRectMake(280, 15, 20, 20);
        _arrow_img.image=[UIImage imageNamed:@"Arrow_down_section.png"];
        _arrow_img.backgroundColor=[UIColor clearColor];
        [self addSubview:_arrow_img];

        btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(20, 15, 35, 25);
        [btn setTitle:@"R" forState:UIControlStateNormal];
        btn.backgroundColor = [UIColor blackColor];
        [self addSubview:btn];

    }

    return self;
}

.h ファイル

#import "HeaderViewSection.h"
@property (nonatomic,retain)HeaderViewSection *header_view;

.m ファイル

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    _header_view = [[HeaderViewSection alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    _header_view.tag = section+5000;
    _header_view.btn.tag = section+5000;
    [_header_view.btn addTarget:self action:@selector(expandTableHeaderView:) forControlEvents:UIControlEventTouchUpInside];
    _header_view.arrow_img.tag=section+2000;

    return _header_view;

}

-(void)expandTableHeaderView:(id)sender{

    [self.tblView beginUpdates];
    NSInteger section = [sender tag];
     UIView *view = (UIView *)[_header_view viewWithTag:[sender tag]]; //RETURNS nil
        NSArray *arr = [view subviews]; //RETURNS nil

}

なぜこれが起こるのかわからない?これを解決するのを手伝ってください。

4

1 に答える 1

0

このメソッドでは、新しい headerView を作成しています。現時点では、headerView に subView はありません。headerView.btn.tag を設定していますが、headerView にボタンを追加していません。画像の場合も同様です。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    _header_view = [[HeaderViewSection alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    _header_view.tag = section+5000;
UIButton *button = [UIButton alloc] init];//set frame also
button.tag = section+5000;
 [button addTarget:self action:@selector(expandTableHeaderView:)  forControlEvents:UIControlEventTouchUpInside];
[header_view addSubView:button];

   //Do same like image view

}

Edied: as-(void)expandTableHeaderView:(id)sender{ }メソッドは、ボタンをタップしたときにのみ呼び出されます。Button は headerView の subView です。superViewこのようにメソッドを呼び出すことでヘッダービューを持つことができます

UIView *view = (UIView*)[sender superView];
view.frame = // new frame

これで、ビューは headerView になりました。そのフレームを変更して展開したり、必要に応じて変更したりできます。このようなサブビューを取得できます

NSArray *array = [view subViews];
for(UIView *v in array){
if([v isKindOfClass:[UIImage class]]){
//v is imageview change image if you want
} 
于 2013-11-11T10:35:23.413 に答える