Storyboard和xib在同一个项目中使用

时间:2013-08-29 16:29:23

标签: iphone objective-c class storyboard xib

我对我认为可能是对Objective-C中类如何工作的基本误解感到磕磕绊绊。我正在使用Storyboards但在这个应用程序中我想为我的一个视图控制器上的文本字段创建一个简单的自定义日期选择器视图。但是,我似乎在从视图控制器访问日期选择器类的任何属性时遇到问题:

首先我在IB中对我的CustomDatePicker.xib建模如下:

enter image description here

我通过下载UIView创建了一个自定义类,如下所示:

CustomPicker.h

@interface CustomPickerView : UIView

@property (strong, nonatomic) IBOutlet UIDatePicker* datePicker;

@end

CustomerPicker.m

@implementation CustomPickerView

- (id)init
{
    self = [super initWithFrame:CGRectMake(0, 0, 320, 258)];
    if (self) {
        [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"CustomPickerView" owner:self options:nil] objectAtIndex:0]];
    }
    return self;
}

在我的ViewController中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.customPickerView=[[CustomPickerView alloc] init];

    // THE MAIN ISSUE IS...
    // Following line has no effect on how picker is presented ???
    self.customPickerView.datePicker.datePickerMode=UIDatePickerModeTime;

    self.dateField.inputView=self.customPickerView;
}

点击文本字段后,我的CustomDatePicker弹出正常。但是,我似乎无法从我的ViewController的viewDidLoad方法设置.datePickerMode。我可以更改.datePickerMode的唯一方法是通过IB,当然这不会在运行时工作。

我已经在IB中连接了插座,并且能够从类中访问datePicker.date但不能访问ViewController。

我研究并观察了许多实现这一概念的方法。我的问题不是如何实现CustomDatePicker它是“为什么我不能从实例化它的ViewController访问我的CustomDatePicker的属性?

2 个答案:

答案 0 :(得分:1)

我在加载NIB时成功更改了datePickerMode属性,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"CustomPickerView" owner:self options:nil];
    self.customPickerView = (CustomPickerView *)[nibArray objectAtIndex:0];
    self.customPickerView.datePicker.datePickerMode = UIDatePickerModeTime;

    self.dateField.inputView = self.customPickerView;
}

您可以完全删除自定义视图的init方法。我从未见过init方法中加载的NIB,就像你正在做的那样。尽管有可能,但我相信这是造成问题的原因。将NIB加载到ViewController的viewDidLoad并直接设置它似乎更直接。

答案 1 :(得分:0)

请在此处查看解决方案:

Objective-C Custom Class Actions and Outlets