2014-01-26 48 views
0

我是新来的Objective-C,这是一个新手的问​​题。 我正在写一个应用程序,它在许多视图上都有这个自定义标签。 (编辑)标签上有两个部分:作为一个标题和有一些简短的文字较小下标的主要标签。 (/编辑) 看来愚蠢手动将标签贴在所有的意见,让我开始思考做这将包括两个标签的自定义控制:mainLabelsubLabel。我不确定这里有什么方法更好。我应该自定义UIView还是有更好的方法?用于在许多ViewController上显示标签的自定义UIView?

如果定制UIView才是正道,我应该如何处理标签的设置?创建协议委托会使ViewController实现标签控制初始化方法是否正确吗?

编辑: 如何重复使用自定义的UIView所以后来当标签样式的变化,我没有改变他们每个人separatly的容貌,但有这回事,每次使用某种Ø模板自定义的UIView使用

我就把这答案这里的人谁就会有同样的问题:

您应该使用自定义的UIView控制设置标签(检查下面的答案)一起用.xib文件来定义标签外观的模板。 如果你有兴趣了解的UIView和的.xib文件,看看这个: How to use a xib and a UIView subclass together?

感谢您的帮助!

+0

需要更多细节。关于标签的定义是什么? – nhgrif

+0

没有什么真正的习惯。它总是有两个具有特定位置和外观的正常标签。我只是不确定它是否会在全球范围内发生变化。用手改变每个视图将是一个痛苦... – Tomek

+0

你的问题还远未明确。除了标签上的文字之外,您想要更改这些标签吗? – nhgrif

回答

2

你并不需要一个代理关系简单地设置一对文本标签。如果你想要做一个UIView子类有两个标签,一个视图,并简单地这一观点添加到您的视图控制器,然后在视图子类中,正确的,将类似于UILabel setText:方法的方法。它只需要两个参数。

所以,如果mainLabelsubLabel对你的UIView子类的.m文件UILabel属性,你可以做这样的事情:

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文件来设置自定义视图的外观。而且我可能会添加一个自定义工厂方法,它会立即采用manTextsubText参数并调用setText:subText:

如果您继承了UIView,则可以在子类中包含的视图的特定代码越多越好。


以同样的方式我已经添加方法到UIView允许您更改mainTextsubText,或两者在一个单一的方法调用的同时,你可以继续添加方法,如本改变你的UIView的属性。

如果要重新定位你的标签,考虑增加一对CGPoint属性:

@property (nonatomic,assign) CGPoint mainLabelPosition; 
@property (nonatomic,assign) CGPoint subLabelPosition; 

- (void)setPosition:(CGPoint)mainPosition subPosition:(CGPoint)subPosition; 

并写出这些类似的那些我给你改变文本的方法。

+0

好吧,我明白了,但是我怎么把这个东西放在所有的viewcontrollers上,这样我就不必在以后风格改变时改变它们了。 – Tomek

+0

改变什么?同样,当我对原始问题进行评论时,我需要更多的细节。你非常含糊。 – nhgrif

+0

我在评论中询问了您的评论:)我将编辑问题 – Tomek

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]; 
} 
+0

这将创建两个UILabels使用,这很酷,但布局呢?我如何自动执行此操作? – Tomek

+0

mainLabel和subLabel是公共属性,只需将其框架设置为instance.mainLabel.frame = someFrame; – santhu

相关问题