我是Objective-c的新手,这是一个新手问题。
我正在编写一个应用程序,在许多视图上都有这个自定义标签。
(编辑)标签有两个部分:作为标题的主标签和具有一些短文本的较小子标签。 (/编辑)
将标签手动放在所有视图上似乎很愚蠢,所以我开始考虑制作一个由两个标签组成的自定义控件:mainLabel
和subLabel
。我不确定这里有什么方法更好。我应该制作一个自定义UIView
还是有更好的方法呢?
如果自定义UIView
是正确的方法,我该如何处理标签的设置?创建一个协议委托会使ViewController实现标签控件初始化方法成为正确的方法吗?
编辑: 我如何重新使用自定义UIView,以便稍后当标签样式发生变化时,我不必分别更改每个样式的外观,而是每次使用自定义UIView时都要使用某种模板
我会在这里提出回答给任何有同样问题的人:
您应该使用自定义UIView控制设置标签(请查看下面的答案)以及.xib文件,该文件将定义标签外观的模板。 如果您对UIView和.xib文件感兴趣,请查看: How to use a xib and a UIView subclass together?
感谢您的帮助!
答案 0 :(得分:2)
只需设置一对文本标签,就不需要委托关系。如果要为具有两个标签的视图执行UIView
子类,只需将此视图添加到视图控制器,然后在视图子类中,右键一个与UILabel setText:
方法类似的方法。它只需要两个参数。
因此,如果mainLabel
子类subLabel
文件中的UILabel
和UIView
属性为.m
,则可能会执行以下操作:
在UIView
子类的.h
文件中:
@interface DoubleLabelView
@property (nonatomic,strong) NSString *mainText;
@property (nonatomic,strong) NSString *subText;
- (void)setText:(NSString*)mainText subText:(NSString*)subText;
@end
然后在.m
文件中:
@interface DoubleLabelView()
@property (nonatomic,strong) UILabel *mainLabel;
@property (nonatomic,strong) UILabel *subLabel;
@end
@implementation DoubleLabelView
- (void)setText:(NSString*)mainText subText:(NSString*)subText {
self.mainText = mainText;
self.subText = subText;
}
- (void)setMainText:(NSString*)mainText {
_mainText = mainText;
self.mainLabel.text = mainText;
}
- (void)setSubText:(NSString*)subText {
_subText = subText;
self.subLabel.text = subText;
}
如果自定义视图上标签的位置不变,我建议您只使用.xib
文件来准确设置自定义视图的外观。我可能会添加一个自定义工厂方法,该方法接收manText
和subText
个参数,并在那时调用setText:subText:
。
如果你是UIView
的子类,则子类中包含的视图特定代码越多越好。
我以相同的方式向UIView
添加了方法,允许您在单个方法调用中同时更改mainText
,subText
或两者,可以继续添加此类方法来更改UIView
的属性。
如果您想重新定位标签,请考虑添加一对CGPoint
属性:
@property (nonatomic,assign) CGPoint mainLabelPosition;
@property (nonatomic,assign) CGPoint subLabelPosition;
- (void)setPosition:(CGPoint)mainPosition subPosition:(CGPoint)subPosition;
并为这些方法编写类似于我向您展示的用于更改文本的方法。
答案 1 :(得分:1)
创建UIView的子类,如下所示,
CustomView.h文件
@interface CustomView : UIView
@property UILabel *mainLabel;
@property UILabel *subLabel;
-(void)showMainLabelWithText:(NSString *)text;
-(void)showSubLabel:(NSString *)text;
@end
CustomView.m文件
@implementation CustomView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)showMainLabelWithText:(NSString *)text{
self.mainLabel =[[UILabel alloc] init];
self.mainLabel.text =text;
[self addSubview:self.mainLabel];
}
-(void)showSubLabel:(NSString *)text{
self.subLabel =[[UILabel alloc] init];
self.subLabel.text =text;
[self addSubview:self.subLabel];
}