在 Interface Builder 和 XCode 中连接一个 UILabel?

10

我试图在XCode和IB中将一个Label添加到视图上,但是我无法找到如何实现它。我在网上找到的所有示例都是旧版本的IB,所以指导不正确。

在我的.xib文件中,我有一个Label,在我的Controller.h文件中,我声明了一个带有Property设置的IBOutlet UILabel。

在我的Controller.m文件中,我合成了这个Property。

在Interface Builder中,我无法找到如何在代码中将我的标签与.xib文件中的标签相关联。 每当我尝试将连接拖动到File's Owner时,唯一显示的选项就是“View”。

如果我在Interface Builder的Library窗口下查看Controller,该标签会显示为Outlets下的UILabel。我很确定它以前是类型“id”,但它自动显示为UILabel,并且如果我尝试添加一个“id”的标签,也不起作用。

有人能指引我去哪里解释这个愚蠢的东西吗?让标签显示文本不应该这么困难。


请发布Controller.m和.h文件。 - ennuikiller
PackViewController.h:http://pastebin.com/DesS8j50 PackViewController.m:http://pastebin.com/jasum3SB - James P. Wright
他在声明IBOutlet方面没有任何问题,他只需要正确连接它。他正在尝试将标签连接到实际文件所有者图标上,这将仅显示VIEW。 如果您查看我发送给您的帖子,我编写了一堆代码,与pselus相同,但这只是为了确保您正确编写了代码。然后我们进入interfacebuilder,并在帖子中解释您需要做什么。请查看下面。谢谢 - Pavan
5个回答

8
假设您的视图名称为ExampleView。单击文件所有者,然后按⌘+4。这将突出显示身份框。确保类名与您的类名相同。
保存并关闭Interface Builder,然后进入Xcode进行验证:
// ExampleViewController.h
#import <UIKit/UIKit.h>

@class ExampleViewController;
@interface ExampleViewController : UIViewController {

    IBOutlet UILabel *label;
}

@property (retain, nonatomic) IBOutlet UILabel *label;

@end

在你的.m文件中:
// ExampleViewController.m
#import "ExampleViewController.h"

@implementation ExampleViewController

@synthesize label;

然后保存Xcode文件并打开您的ExampleView。将标签拖到视图上。您不应将该标签连接到文件所有者。

相反,您需要点击文件所有者。按下⌘+2,这将打开连接框。然后您将看到您的输出口。单击并将其连接到您的标签。


我注意到你的代码中有一个错误... 在你的.H文件中... 你应该在属性(retain,nonatomic)后添加IBOUTLET,如:IBOUTLET uilabel *cardnamelabel。而你只写了property(retain,nonatomic)uilabel *cardNamelabel。这不是一个IBOUTLET。 - Pavan
抱歉,把那些删掉。接下来我想让你做的是将你在.m文件中的[CardNameLabel setText:@"Test"];改为小写的'c',因为你用小写的'c'声明了它。另外,在你通过代码创建的IBOutlet与界面构建器连接之前,你无法设置文本。所以去界面构建器中连接上它吧 :D 按照我给你的指南进行操作。 - Pavan
哦,我明白你的意思了。将IBOutlet声明为属性是一种选择,你不必这样做。是的,你说得对。不过,最重要的是要在界面构建器中连接iboutlet cardNameLabel和你从库中拖到视图上的UILabel。 - Pavan
完全删除了.xib文件,创建了一个新的文件,并进行了测试,没有标签也能正常工作。然后我添加了一个标签(并将其从cardNameLabel更改为cardName),现在我收到了与键值编码兼容性相关的完全相同的错误。 - James P. Wright
你能把你的项目发给我吗?我猜它只是一个带有UILabel的简单项目。 - Pavan
显示剩余11条评论

3
确保您的产权线看起来像这样:
@property (nonatomic, retain) IBOutlet UILabel *label;

在Interface Builder中,将标签类型设置为UILabel。如果不起作用,请尝试在Interface Builder中选择文件->重新加载所有类文件。您的代码看起来很好,但CardNameLabel应该以小写字母“c”开头。

1
将您的UILabel声明为属性是可选的。 - Henrik P. Hessel

2
以下是如何在Swift中将UILabel连接到你的Storyboard的步骤:
  1. 在Xcode中点击icon图标。如果你使用的是旧版本的Xcode,请使用窗口右上角的Venn图。

  2. 使用顶部的工具栏,在文件查看器的一半选择你的storyboard,另一半选择你的视图控制器。

  3. 按住control键,单击你想要创建IB Outlet/Action的UI元素,并将其拖动到View Controller文件中:enter image description here
  4. 选择你的IBOutlet/Action的偏好设置:enter image description here
你已成功将你的storyboard元素链接到你的代码。
你可以参考这个教程来观看如何将你的Storyboard元素与代码连接的视频。

2
请尝试以下步骤:点击File's Owner图标以选择它,然后进入Inspector的Identity选项卡(第四个选项卡),检查Class设置的值。我猜测目前它设置为UIViewController
由于具有你声明的IBOutlet的类是(或应该是)UIViewController的子类,因此你需要将类名更改为你的子类名称(例如,MyController或当前命名的任何内容)。

0
假设您有一个viewController和一个xib文件,其中包含一个UILabel。连接UiLabel(也是xib文件)到您的viewController的步骤如下:
1)在头文件中创建UiLabel对象和其属性。
IBOutlet UILabel *label;

@Property (Nonatomic, retain) IBOutlet UILabel *label;

并在实现文件中进行合成

2)在Interface Builder中打开您的xib文件

双击“文件所有者”,然后在弹出窗口的下拉列表中选择视图控制器,将您的xib文件连接到控制器

3)右键单击文件所有者,在弹出对话框上:

  • 指向并拖动加号(+)到“View”旁边,然后将其放在View行上
  • 指向并拖动加号(+)到标签旁边,然后将其放在视图上的标签上

=> 现在xib文件上的标签和视图已连接到您的控制器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接