创建一个新的iOS控件

时间:2014-06-23 19:03:16

标签: ios objective-c uicontrol

我正在尝试为Xcode创建一个新控件,以实现一个新的iOS应用程序。最终的想法是以图形方式显示足球队的形成。我意识到这可能都是以编程方式编码的,但我想创建一个新的控件来代表一个玩家,然后相应地加载阵型,因为我可能会在将来向控件添加其他玩家信息。

我创建了一个xib视图文件,其中有一个用于显示其名称的标签。我试过以下但标签的文字没有显示出来。我错过了一些明显的东西吗?

[我已经包含了正确的标题并将标签连接起来并将xib设置为新类]

xib的头文件:

@interface playerObject : UIControl
@property (nonatomic, strong) NSString *playerNameLabel;
@end    

xib的实现文件:

#import "playerObject.h"
@interface playerObject ()
@property (strong, nonatomic) IBOutlet UILabel *nameLabel;
@end

@implementation playerObject
- (void) setPlayerNameLabel:(NSString *)playerNameLabel
{
    self.nameLabel.text = playerNameLabel;
}

查看控制器实施文件:

- (void)viewDidLoad
{
    ...
    playerObject *newPlayer = [[playerObject alloc] initWithFrame:CGRectMake(10, 10, 100, 150)];

    [newPlayer setPlayerNameLabel:@"TEST"];
    [newPlayer setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:newPlayer];

}

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可能已经创建了一个包含标签的xib文件,但您似乎没有使用它。您正在创建playerObject类的新实例,而不是从xib文件中加载一个实例。请查看UINib类文档。

答案 1 :(得分:0)

您正在实例化自定义视图而不从.xib文件加载它。 为了使其工作,请按照下列步骤操作:

  1. playerObject继承自UIView而不是UIControl
  2. 打开您的.xib文件。
  3. 在左窗格中选择根视图。
  4. 在右侧窗格中,切换到Identity Inspector选项卡。
  5. 在第一个文本字段" Class"。
  6. 中输入playerObject
  7. 确保在Interface Builder中连接了所有IBOutlets
  8. 执行以下操作从UIView文件加载自定义.xib

    playerObject *newPlayer = (playerObject *)[[[NSBundle mainBundle] loadNibNamed:@"MyXibFilename" owner:nil options:nil] firstObject];
    newPlayer.playerNameLabel = @"Lionel Messi";
    
  9. 请注意:我强烈建议您开始使用"名称空间"对于您的课程(它只是一个两个字母的前缀),例如XXPlayerObject,其中XX是您认为描述您的应用/模块的其他内容。所有其他相关的自定义类应该"分享"此命名空间。看看Apple对其课程的看法。

    我希望这可以帮到你!