【问题标题】:Assigning Property to Loaded .xib将属性分配给加载的 .xib
【发布时间】:2015-04-27 22:56:37
【问题描述】:

我正在尝试更改正在加载的 .xib 中的按钮标题:

CustomToolBar *toolBar = (CustomToolBar *)[[[[NSBundle mainBundle] 
                                          loadNibNamed:@"CoolBar" 
                                          owner:self options:nil] objectAtIndex:0] 
                                          initWithFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 70)];

我试过直接用改变它

toolBar.button.titleLabel.text = @"VALUE";

并且通过自定义的setter方法,

- (void)updateButtonText:(NSString *)buttonText {
    _button.titleLabel.text = buttonText;
}

但是,它始终默认为 .xib 文件中给定的值。

【问题讨论】:

  • 如何知道toolBar.button 是否正在更新?它不在您的界面中,因此没有什么可看的。您所做的只是将其加载到您的代码中。

标签: ios cocoa-touch interface-builder xib


【解决方案1】:
CustomToolBar *toolBar = 
    (CustomToolBar *)[[[[NSBundle mainBundle] 
        loadNibNamed:@"CoolBar" 
        owner:self options:nil] objectAtIndex:0] 
    initWithFrame:CGRectMake(
        0, self.view.frame.size.height, self.view.frame.size.width, 70)];

您的代码毫无意义。你不能/不能init从笔尖加载的对象;它已经被初始化了。

我建议您将该声明分成几个步骤,并确保每个步骤都能为您提供预期的结果 - 当然,放弃init

NSArray* arr = [NSBundle mainBundle] 
        loadNibNamed:@"CoolBar" 
        owner:nil options:nil]; // did it load?
id obj = [arr objectAtIndex: 0]; // did you get the CustomToolbar?
CustomToolBar *toolBar = 
    (CustomToolBar *) obj; // still ok?
toolbar.frame = CGRectMake(
    0, self.view.frame.size.height, self.view.frame.size.width, 70);

等等。

然后你就可以开始考虑你想做什么toolBar。目前它没有被放入您的界面,因此您无法知道您的更改是否会影响它。一旦完成,您就可以开始询问自己代码的rest。例如,尝试直接设置 UIButton 的 titleLabel.text 是疯狂的(也是错误的);这不是按钮的工作方式。一旦你有了toolBar,你就可以说

[toolBar.button setTitle:@"VALUE" forState: UIControlStateNormal];

【讨论】:

  • >目前它没有被放入您的界面工具栏正在被放入界面,问题仅在于文本字段。不过谢谢你的建议,我会删除初始化的。
  • 我只知道你显示的代码。你没有显示足够的代码,我不得不怀疑你没有做你需要做的事情。如果您显示更多代码,您可以获得更好的帮助。
  • 谢谢,马特。我成功地将加载的 .xib 作为子视图添加到当前视图([self.view addSubview:toolBar];)。上面所有评论的健全性检查都通过了。 CustomToolBar 接口将按钮属性声明为@property (strong, nonatomic) IBOutlet UIButton *button;。我正在尝试更新其 titleLabel 的值,如原始帖子中所示。
  • 为什么有人会通过设置 UIButton 的titleLabel.text 来设置它的文本?这不是你的做法。你打电话给setTitle:forState:
  • 该方法之前没有给出预期的结果,可能是由于调用initWithFrame 的错误或另一个愚蠢的错误。无论如何,这个修复是有效的,它让我更接近于理解加载笔尖。再次感谢。
【解决方案2】:

不要像你一样加载笔尖,而是使用CustomToolBar *toolBar = [[CustomToolBar alloc] initWithNibNamed:@"CoolBar" inBundle:nil]

发送 nil 会加载默认包,这是您的主包。

制作完成后,您可以更改其框架。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2016-05-06
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多