【问题标题】:View Objects don't connect to the File's Owner查看对象未连接到文件的所有者
【发布时间】:2011-07-25 00:13:09
【问题描述】:

我正在尝试使用interface builder 将视图中的对象“连接”到File's Owner,但蓝线并未与之“链接”。这是我的代码:

CalculatorViewController.h:

#import <UIKit/UIKit.h>
#import "CalculatorBrain.h"

@interface CalculatorViewController : UIViewController {
    IBOutlet UILabel *display;
    IBOutlet UIButton *button;
    CalculatorBrain *brain;
    BOOL userIsInTheMiddleOfTypingANumber;
}

- (IBAction)digitPressed: (UIButton *)sender;
- (IBAction)operationPressed: (UIButton *)sender;

@end

CalculatorViewController.m:

#import "CalculatorViewController.h"

@implementation CalculatorViewController

- (CalculatorBrain *)brain
{
    if (!brain) {
        brain = [[CalculatorBrain alloc] init];
    }
    return brain;
}


- (IBAction)digitPressed:(UIButton *)sender
{
    NSString *digit = [[sender titleLabel] text];
    if (userIsInTheMiddleOfTypingANumber) {
        [display setText: [[display text] stringByAppendingString:digit]];
    } else {
        [display setText:digit];
        userIsInTheMiddleOfTypingANumber = YES;
    }
}

- (IBAction)operationPressed: (UIButton *)sender 
{
    if (userIsInTheMiddleOfTypingANumber) {
        [[self brain] setOperand: [[display text] doubleValue]];
        userIsInTheMiddleOfTypingANumber = NO;
    }
    NSString *operation = [[sender titleLabel] text];
    double result = [[self brain] performOperation:operation];
    [display setText: [NSString stringWithFormat: @"%g", result]];
}
@end  

【问题讨论】:

  • 将 iboutlet 交给 object 。像这样 IBOutlet UITextField *txtPassword;然后查看界面生成器
  • 请包含 CalculatorViewController.h 的内容而不是/也
  • @user681410:请查看我的回答。我已经编辑了我的答案,并截取了您需要查找的内容。希望对你有所帮助。
  • 代码已被编辑以在头文件中添加“IBOutlet UIButton *button”。
  • -1 给你。我认为您还应该查看回答者给出答案的时间,并据此勾选您的答案。因为解决方案越快越好。

标签: iphone xcode interface-builder


【解决方案1】:

尝试检查文件所有者的类是否在 XIB 中正确设置为 ViewController 类。

检查转到您的 XIB

单击文件的所有者并打开检查器。

在检查器中,转到最后一个(第四个)选项卡并检查您是否将您的班级设置为&lt;yourViewControllerName&gt;

希望对你有所帮助。

编辑:

为了更好地理解,我添加了一张你需要在哪里寻找课程的图片。

另外请检查您是否在 ViewController 的头文件中声明了带有 IBOutlet 前缀的变量

【讨论】:

  • 我非常感谢。谢谢。
  • 不,这不是问题所在。该类已经是 CalculatorViewController。 :(
【解决方案2】:

确定文件所有者设置为 CalculatorViewController 后,请确保 CalculatorViewController.h 文件中的 IBOutlet 类型与您尝试连接的 UI 组件类型匹配。您的标头为 UILabel 定义了一个 IBOutlet,这意味着只有 UILabel 可以连接到它。 如果组件是不同类型的,比如 UIButton,那么您可以更改头文件以包含 IBOutlet,如下所示:

IBOutlet UIButton *button;

在标题中定义 UIButton 后,切换到 IB。仔细检查文件的所有者是否设置为您的 viewcontroller 类,然后将 UIButton 添加到视图。那么你应该能够:

  1. ctrl+从组件拖动到文件的所有者
  2. 右键单击文件的所有者并获得一个显示所有可用 IBOutlet 的 HUD 样式的弹出窗口。单击并从 UIButton one 拖动到视图中的 UIButton。

如果您希望 IB 中的 UIButton 触发您定义的 IBAction 之一,您将与该操作建立连接。我通常通过右键单击文件所有者来执行此操作,这将显示所有可用的 IBActions 和 IBOutlets。

希望这会有所帮助!

【讨论】:

  • 好吧,我为 UIButton 添加了 IBOutlet,但它仍然不起作用。我需要在某处使用指向其对象的指针吗?
  • 不确定“指向其对象的指针”是什么意思,但在我的回答中添加了一些细节。
  • 当我写 IBOutlet UIButton *button;那么 button 是指向 UIButton 对象的指针,对吧?那么,我需要在课堂上的某个地方使用“按钮”吗?
  • ctrl+拖动失败。当我右键单击 File's Owner 时,这就是我看到的 Outlet searchDisplayController view Referencing Outlet New Referencing Outlet
  • 听起来像: 1. 您没有在 XCode 中保存 .h 文件(这导致 IB 看不到更改);或 2. 文件的所有者未设置为正确的类。
【解决方案3】:

您是否将文件所有者(在界面生成器中)设置为类 CalculatorViewController。

【讨论】:

  • 是的,该类设置为 CalculatorViewController。不过感谢您的帮助。
【解决方案4】:

我不是 Interface Builder 或 Objective C 方面的专家,但你用过吗:

@property (nonatomic, retain) IBOutlet UIButton *yourButton;

然后在.m文件中:

@synthesize yourButton;

我也不确定,但您可能必须先“构建”它,然后 进入 Interface Builder,然后它可能会“连接”起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多