我正纠结于我认为可能是对objective-c中的类如何工作的一个基本误解。我正在使用故事板,但在这个应用程序中,我想为视图控制器上的一个textfield创建一个简单的自定义日期选择器视图。但是,我似乎在从视图控制器访问日期选择器类的任何属性时遇到问题:
首先,我在ib中对customdatepicker.xib建模如下:
我已经创建了一个自定义类,将uiview分为以下子类:
客户选择器.h

@interface CustomPickerView : UIView

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

@end

客户联系人
@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;
}

当文本字段被点击时,我的customdatepicker弹出。但是,我似乎无法从viewcontroller的viewdidload方法设置.datepickermode。我唯一可以更改.datepickermode的方法是通过ib,当然这在运行时是行不通的。
我已经在ib中连接了插座,并且能够从类中访问datepicker.date,但不能访问viewcontroller。
我研究并观察了实现这一概念的许多方法。我的问题不是如何实现customdatepicker而是“为什么我不能从实例化它的viewcontroller访问customdatepicker的属性?

最佳答案

在加载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。虽然这是可能的,但我相信这就是造成你问题的原因。在VCub的viewDidLoad中加载笔尖并直接设置它似乎更简单。

10-07 18:37