【问题标题】:Storyboard and xib use in same project故事板和xib在同一个项目中使用
【发布时间】:2013-09-02 04:53:50
【问题描述】:

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

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

我通过子类化 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;
}

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

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

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

【问题讨论】:

    标签: iphone objective-c class storyboard xib


    【解决方案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 并直接设置似乎更简单。

    【讨论】:

    • 感谢您的浏览。我看到你做了什么,但我真的想在我写的 CustomPickerClass 中保持笔尖加载。这样,当我实例化 CustomPickerClass 时,就会加载 nib。此外,如您所描述的那样实现会导致有关 CustomPicker 类本地方法的其他问题,例如按下完成按钮时。我把这部分代码留了出来,专注于我的主要问题。
    【解决方案2】:

    请在此处查看解决方案:

    Objective-C Custom Class Actions and Outlets

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2013-01-12
      • 2013-07-24
      • 2013-11-01
      • 2013-10-11
      相关资源
      最近更新 更多