2010-08-31 21 views
0

我們有一個窗口充滿了小視圖正方形(想起計算器)。iPhone - 以編程方式在視圖中顯示單個字符串

因爲我們想在視圖中顯示一個字符串不使用Interface Builder來添加字符串的窗口上的特定視圖。 我們需要能夠更改字符串並刷新視圖。

我們如何通過編程將字符串添加到一個視圖,並顯示它?


更新:

確定這裏是我們目前擁有的代碼。頭文件中沒有什麼特別的。 我認爲真正的窘境正在考慮我們可以很容易地獲得背景顏色來改變,爲什麼我們的文本沒有顯示? 這兩個版本都在裏面,很高興看到「蘋果」或「橙子」。

- (id)initWithFrame:(CGRect)frame { 
if ((self = [super initWithFrame:frame])) { 

    bgString = @"orange"; 

    UILabel* aLabel = [[UILabel alloc] init]; 
    aLabel.text = @"apple"; 
    self.textLabel = aLabel; 
    [aLabel release]; 
    [self addSubview:textLabel]; 
} 
return self; 
} 

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    [[UIColor yellowColor] setFill]; 
    UIRectFill(rect); 
    [self drawStringCenteredIn:rect]; 
} 

- (void)drawStringCenteredIn:(CGRect)r { 
    //CGSize strSize = [bgString size]; 
    CGPoint strOrigin; 
    strOrigin.x = r.origin.x; //+ (r.size.width - 10)/2; 
    strOrigin.y = r.origin.y; //+ (r.size.height - 10)/2; 
    //[bgString drawAtPoint:strOrigin withFont:[UIFont fontWithName:@"Helvetica" size:10]]; 
    [textLabel drawTextInRect:r]; 
} 

回答

4

在您的視圖控制器的.h:

@interface MyViewController 
{ 
    UILabel* label; 
} 

@property (nonatomic, retain) UILabel* label; 

在您的視圖控制器的.m:

- (void)dealloc 
{ 
    [label release]; 
    [super dealloc]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UILabel* aLabel = [[UILabel alloc] init]; 
    aLabel.text = @"Initial Text"; 
    self.label = aLabel; 
    [aLabel release]; 
    [self.view addSubview:aLabel]; 
} 

- (void)viewDidUnload 
{ 
    [self.label removeFromSuperview]; 
    self.label = nil; 
} 

// Call this when you need to update the label 
- (void)updateLabel 
{ 
    self.label.text = @"Some updated text"; 
} 

難道從內存,但它應該工作。

+0

別忘了'[aLabel sizeToFit]' – cobbal 2010-08-31 04:07:46

+0

嗯。也忘了用框架來初始化它 - 希望OP可以採取這種方式並運行它。 – 2010-08-31 04:14:00

+0

感謝大家迄今爲止的快速反應。 這將工作得很好,如果我使用ViewController,但我特別想與主視圖控制器上的「視圖」進行交互。 所以我需要我的代碼去drawRect類型的結構。 – Evolve 2010-08-31 04:52:43

0

如何創建一個UILabel並將其添加到視圖?

+0

打我8秒,+1 – cobbal 2010-08-31 03:56:36

+0

我們如何以編程方式做到這一點? – Evolve 2010-08-31 04:00:25

+0

當我輸入我的解決方案時,St3fan發佈了這個消息 - 查看我的答案。 – 2010-08-31 04:02:18

0

如果子類的UIView,你可以請你在視圖的drawRect字符串。這允許在修改文本,外觀和放置方面有很大的靈活性(甚至可以對它進行動畫,旋轉,旋轉等)。

更改NSString後,在視圖上調用setNeedsDisplay。然後在drawRect被調用時在NSString上執行drawAtPoint:withFont:。

+0

雖然你認爲這種方法允許「極大的靈活性」,但對UIView進行子類化和重寫'drawRect:'可能是這項工作的錯誤工具。 – 2010-08-31 05:15:09

1

試試這個:

UILabel* aLabel = [[UILabel alloc] initWithFrame:[self bounds]]; 

如果要創建手動標籤,你需要設置它的框架手動過。 框架本身是父視圖(超級視圖)內的大小和位置。 在我的例子中,我設置了標籤的框架來佔據整個視圖。如果您需要自定義尺寸,您可以使用:

UILabel* aLabel = [[UILabel alloc] initWithFrame:CGRectMake(x,y,width,height)]; 

其中(x,y) - 標籤左上角的位置。

相關問題