nib ファイルをロードし、それをヘッダー UIView として設定するセクション ヘッダーを作成したいと考えています。このnibファイルには、アウトレットとアクションが接続されている関連クラスも含まれているため、通常のようにnibでそのクラスをロードしたいと考えています。
私はウェブを精査し、いくつかの同様の回答を見つけましたが、私のために働くことはできません. 数日間遊んだ後、ビューを正しく表示することができましたが、接続を追加してテキストを別の方法で表示するように指示しても何もしません。
たとえば、セクション タイトル テキストが nil で初期化されていて、それでも同じテキストが表示され、変更しようとしても反映されず、ボタンで行われた接続がトリガーされない場合は、セクション タイトル テキストをクリアする必要があります。
これがビュー用のビューコントローラーです
@interface ADUNewRowHeaderViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *sectionTitleField;
@property (strong, nonatomic) IBOutlet UIButton *addRowBtn;
@property(strong,nonatomic) NSString* sectionTitle;
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
title:(NSString*) titleOrNil;
@end
そして、ここに実装があります
@implementation ADUNewRowHeaderViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil title:(NSString *)titleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
if(titleOrNil != nil)
{
[self setSectionTitle:titleOrNil];
}
else
{
[self setSectionTitle:@""];
}
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)setSectionTitle:(NSString *)sectionTitle
{
_sectionTitle = sectionTitle;
[[self sectionTitleField] setText:sectionTitle];
}
@end
実際のテーブルビューコントローラーでは、次のようにリストされています
@property(nonatomic, strong) ADUNewRowHeaderViewController* secHeader;
およびviewDidLoadの下の実装ファイルで
[self setSecHeader:[[ADUNewRowHeaderViewController alloc] initWithNibName:nil bundle:nil title:nil]];
[[[self secHeader] addRowBtn] addTarget:self action:@selector(addNewRow:) forControlEvents:UIControlEventTouchUpInside];
と
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
return [[self secHeader] view];
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return [[self secHeader] view].bounds.size.height;
}
これはアクションのメソッド宣言です
- (IBAction)addNewRow:(id)sender;