我正在尝试为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];
}
提前致谢!
答案 0 :(得分:0)
您可能已经创建了一个包含标签的xib文件,但您似乎没有使用它。您正在创建playerObject
类的新实例,而不是从xib文件中加载一个实例。请查看UINib
类文档。
答案 1 :(得分:0)
您正在实例化自定义视图而不从.xib文件加载它。 为了使其工作,请按照下列步骤操作:
playerObject
继承自UIView
而不是UIControl
。.xib
文件。playerObject
IBOutlets
。执行以下操作从UIView
文件加载自定义.xib
:
playerObject *newPlayer = (playerObject *)[[[NSBundle mainBundle] loadNibNamed:@"MyXibFilename" owner:nil options:nil] firstObject];
newPlayer.playerNameLabel = @"Lionel Messi";
请注意:我强烈建议您开始使用"名称空间"对于您的课程(它只是一个两个字母的前缀),例如XXPlayerObject
,其中XX是您认为描述您的应用/模块的其他内容。所有其他相关的自定义类应该"分享"此命名空间。看看Apple对其课程的看法。
我希望这可以帮到你!