Ios 使用nib作为具有nib类的表节标题

Ios 使用nib作为具有nib类的表节标题,ios,uitableview,uiview,uibutton,Ios,Uitableview,Uiview,Uibutton,我想创建一个加载nib文件的节头,并将其设置为UIView头。这个nib文件还将有一个相关的类,其中的出口和操作都连接到该类,所以我想像普通的一样用nib加载该类 我在网上搜索了一下,找到了几个类似的答案,但我找不到任何适合我的答案。在玩了几天之后,我设法让视图正确显示,但尽管添加了连接并告诉文本以不同的方式显示,它还是没有做任何事情 例如,如果部分标题文本为init和nil,则应清除该部分标题文本,但它仍然显示相同的文本,尝试更改也不会反映这一点,并且不会触发使用按钮进行的任何连接 这是我的视

我想创建一个加载nib文件的节头,并将其设置为UIView头。这个nib文件还将有一个相关的类,其中的出口和操作都连接到该类,所以我想像普通的一样用nib加载该类

我在网上搜索了一下,找到了几个类似的答案,但我找不到任何适合我的答案。在玩了几天之后,我设法让视图正确显示,但尽管添加了连接并告诉文本以不同的方式显示,它还是没有做任何事情

例如,如果部分标题文本为init和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 as下的实现文件中

[self setSecHeader:[[ADUNewRowHeaderViewController alloc] initWithNibName:nil bundle:nil title:nil]];
[[[self secHeader] addRowBtn] addTarget:self action:@selector(addNewRow:) forControlEvents:UIControlEventTouchUpInside];

这是操作的方法声明

- (IBAction)addNewRow:(id)sender;

您应该创建一个
UIView
,而不是
UIViewController
,子类。
.m
将包含:

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame])
    {
        [self setUp];
    }

    return self;
}

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self setUp];
}

- (void)setUp
{    
    [[NSBundle mainBundle] loadNibNamed:@"YourNibName" owner:self options:nil];
    CGRect frame = self.frame;
    self.view.frame = CGRectMake(0, 0, frame.size.width, frame.size.height);
    [self addSubview:self.view];

    ... do other initialisations here ...
}
.h

@interface ADUNewRowHeaderView : UIView

@property (nonatomic, strong) IBOutlet UIView*   view;
然后在XIB中:像往常一样,使文件的所有者成为类
ADUNewRowHeaderView
。并将XIB的顶级视图的引用出口连接到上面的
视图
属性(即文件的所有者)

然后,您可以将UIView子类放置在另一个XIB上(作为UIView,您将其类设置为ADUNewRowHeaderView),或者在代码中实例化并添加为子视图


(或者,您可以在代码中创建UIView及其子视图(按钮、标签等);这样您就不需要XIB了。但这当然只适用于UIView很简单,几乎没有自己的逻辑,并且很少有易于在代码中布局的UI元素的情况。)

除了我必须删除
CGRect frame=self.frame;self.view.frame=CGRectMake(0,0,frame.size.width,frame.size.height)来自安装程序,它在之后工作。因此,我在nib中的UIButton的响应明显比它原来所在的工具栏慢,就像我可以在一秒钟内多次按下工具栏按钮,它会立即添加这些行,但如果我在一秒钟内多次按下新的nib按钮,它可能只会添加一到两行。按钮正常响应,只是行没有立即添加(这不是问题,只是我注意到了),请选择此作为答案。
@interface ADUNewRowHeaderView : UIView

@property (nonatomic, strong) IBOutlet UIView*   view;