2014-01-26 63 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

相關問題