我对我认为可能是对 Objective-C 中类的工作方式的根本误解感到困惑。我正在使用 Storyboard,但在此应用程序中,我想为我的一个 View Controller 上的文本字段创建一个简单的自定义日期选择器 View 。但是,我似乎在从我的 View Controller 访问日期选择器类的任何属性时遇到问题:
首先,我在 IB 中对我的 CustomDatePicker.xib 建模如下:
我通过子类化 UIView 创建了一个自定义类,如下所示:
自定义选择器.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 中的 socket ,并且能够从类中访问 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;
}
而且您可以完全删除自定义 View 的 init
方法。我从未见过像您这样在 init
方法中加载的 NIB。虽然有可能,但我相信这就是导致您出现问题的原因。在 ViewController 的 viewDidLoad
中加载 NIB 并直接设置它似乎更直接。
关于iphone - Storyboard和 xib 在同一个项目中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516318/