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

3
我在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;
}

在我的视图控制器中:
- (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;
}

当点击文本框时,我的自定义日期选择器会弹出。然而,我无法在视图控制器的viewDidLoad方法中设置.datePickerMode。唯一能改变.datePickerMode的方式是通过IB,当然这在运行时不起作用。
我已经在IB中连接了outlet,并且能够在类内部访问datePicker.date,但无法在视图控制器中访问。
我已经研究并查看了许多实现此概念的方法。我的问题不是如何实现自定义日期选择器,而是“为什么无法从实例化它的视图控制器中访问自定义日期选择器的属性?”
2个回答

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。虽然这可能是可能的,但我认为这是导致问题的原因。在ViewController的viewDidLoad中加载NIB并直接设置它似乎更加简单明了。


谢谢您的关注。我看到了您所做的事情,但我真的想将nib加载保留在我编写的CustomPickerClass中。这样,当我实例化CustomPickerClass时,nib就会被加载。此外,按照您描述的实现方式会导致其他问题,例如CustomPicker Class本地方法的实现,比如按下Done按钮时。我省略了代码的这部分内容,以便集中讨论我的主要问题。 - Dan Cooley

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接