2010-07-09 30 views
25

için metin ekleme Nasıl bir metin eklemek istiyorum bir UIView var. Ben bir UITextView kullandım ama sanırım bu düzenlenebilir olması gerekmez gibi overkill. Bir UILabel veya bir UITextField kullanmayı düşündüm, ancak süper görüntüyü, kendi içinde UILabel veya UITextField konumunu nereye konumlandıracağınızı anlayamıyorum. İstediğim yazı tipinin/renginin/boyutunun metnini UIView adresime koymamı sağlayan en düşük ayak izi nesnesini istiyorum. Sormayacak kadar değil, değil mi?Program aracılığıyla bir UIView

cevap

60

sizin için en basit yaklaşım olacaktır:

UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 20)]; 

[yourLabel setTextColor:[UIColor blackColor]]; 
[yourLabel setBackgroundColor:[UIColor clearColor]]; 
[yourLabel setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]]; 
[yourSuperView addSubview:yourLabel]; 

Bina veya kodunuzu Görüntüleme doldurma CGRectMake çok kullanmaları gerekecek muhtemelen olacaktır. Adından da anlaşılacağı gibi, UIView-Subclass (bu durumda UILabel) 'un göreceli konumunu (süper görüntünüzün kenarlıklarına göre) ve boyutunu ayarlamak için kullanabileceğiniz bir dikdörtgen oluşturur.

Bu gibi çalışır:

yourLabel.Frame = CGRectMake(x, y, width, height); //x,y,width,height are float values. 

x Superview sol sınır ve eklemek için ilgili subview başında arasındaki boşluğu tanımlar, aynı y için de geçerlidir ama üstü arasındaki aralığı ile ilgili -Görünüşünüzü kutluyor. sonra genişlik ve yükseklik kendiliğinden açıklayıcı olduğunu düşünüyorum.

Umarım bu sizi yolda tutar.

+1

Ben UITextField ... belgelerinde UILabel ve UITextField hem baktı ve onlar devralan görüyoruz NSObject yüzden olduğunu tahmin ediyorum çünkü onlar Her ikisi de UIView'den miras, UIView'in sahip olduğu tüm özelliklere sahip mi? ... artı yol boyunca aldıkları ekstralar? Bu mantıklı ama UILabel belgelerinde, Apple dışında herhangi yöntemleri listelemiyor - (void) drawTextInRect: (CGRect) rect ve - (CGRect) textRectForBounds: (CGRect) – Steve

+0

dönmelerini (Comment kutuları benim gibi endişeli insanlar için çok küçük ...) Kullandığım herhangi bir sınıf için NSC'nin her üst sınıfının tüm özelliklerine NSObject'e erişebileceğimi farz etmem gerekir mi? Yardımlarınız için teşekkürler, takdir! – Steve

+0

Evet, haklısınız, bu tam olarak kalıtımın işleyiş şeklidir. Hala drawTextInRect ile elde etmek istediğiniz şeyi alamıyorum. Bir UILabel (veya bu konuya ilişkin bir UITextview), metni çok kolay bir şekilde ayarlamanıza olanak veren işlevsellik sağlayan Görünümlerdir. Belki de sorunu burada görmüyorum :). – samsam

0

Görünümünüze bir UILabel ekleyin. daha sonra View'ın layoutSubviews yöntemini geçersiz kılın.

8

UILabel'in nerede konumlandırılacağını anlatmanın bir yolunu bulmak yerine, UILabel'e "merkez" kullanarak görünümde nerede konumlandırılacağını söyleyebilirsiniz.

E.g.

myLabel.center = CGPointMake(0.0, 0.0); 

UILabel'ı kullanabileceğinizi umuyorum, benim için esnek olmayan düzenlenebilir bir metnin temel formudur.

+0

Teşekkürler - bunu koymak için güzel ve özlü bir yol. UILabel gibi şeylerin tam bir UIView'den daha az yük taşıdığını düşünerek düzeliyorum mu? Şimdi (düşünün) UIView'den miras aldığını fark ettim, bu hatalı bir varsayım mı? – Steve

+1

Steve, bence siz bir mükemmeliyetçisiniz ve bu iyi. Ama bizim düşünce çizgimiz oldukça farklı, UILabel zaten sizin için tam olarak test edilmiş bir kolaylık olarak var. UIView bunu daha alt düzeyde yapıyor.Evet, daha az havai, daha hızlı, daha az bellek kullanımı anlamına gelebilir, ancak ortaya çıkabilecek çaba ve hatalar buna değer mi? İhtiyaçlarınızı karşılarsa UILabel'ı kullanmanızı öneririm, binlerce kişiyi görüntülemezseniz, daha verimli bir şeyler yapma stratejinizi yeniden düşünebilirsiniz. UIControl: UIView: UIResponder: NSObject UILabel: UIView: UIResponder: – Manny

2

Bu soru eskidir, ancak UILabel veya UITextField kullanmadan saf UIView metin seçeneği için (tüm diğer cevaplar açıklandığı gibi, ancak soru onsuz nasıl yapılacağıdır), benim için alt sınıf bir UIView çalışmasında drawRect. böylece gibi:

- (void)drawRect:(CGRect)rect{ 
    NSString *string = @"Hello World!"; 
    [string drawAtPoint:CGPointMake(100, 100) withFont:[UIFont boldSystemFontOfSize:16.0]]; 
} 
+1

Bunu şimdi geri alıyorum - iOS 7'den gerçekten vazgeçilmez olan Apple, "NSString sınıfına birçok çizim eklemi daha yeni varyantlar lehine kabul edilmiyor" diyor. anlamı drawAtPoint: WithFont Uiview'a bir nsstring çizmenin en iyi yolu değildir. – entire

+0

- (void) drawAtPoint: (CGPoint) noktasınıAttributes: (NSDictionary *) attrs NS_AVAILABLE_IOS (7_0) ile kullanabilirsiniz; IOs7 ve sonraki 3 için – goelectric

1

Bu rutin görüntüler Swift için bir XY pozisyonunda

-(void)placeText:(NSString *)theText:(int)theX:(int)theY { 
    UILabel *textLabel; 

    // Set font and calculate used space 
    UIFont *textFont = [UIFont fontWithName:@"Helvetica" size:14]; 
    CGSize textStringSize = [theText sizeWithFont:textFont constrainedToSize:CGSizeMake(300,50) lineBreakMode:NSLineBreakByTruncatingTail]; 

    // Position of the text 
    textLabel = [[UILabel alloc] initWithFrame:CGRectMake(theX+OFFSETIMAGEX-(textStringSize.width/2), theY+OFFSETIMAGEY-(textStringSize.height/2), textStringSize.width,textStringSize.height)]; 

    // Set text attributes 
    textLabel.textColor = [UIColor blackColor]; 
    textLabel.backgroundColor = [UIColor orangeColor]; 
    textLabel.font = textFont; 
    textLabel.text = theText; 

    // Display text 
    [self.view addSubview:textLabel]; 
} 
2

bir metin:

let yourLabel = UILabel(frame: CGRectMake(100, 100, 100, 100)) 
    yourLabel.textColor = UIColor.whiteColor() 
    yourLabel.backgroundColor = UIColor.blackColor() 
    yourLabel.text = "mylabel text" 
    yoursuperview.addSubview(yourLabel) 
+0

için sadece UILabel sözdizimini UILabel olarak değiştirin (frame: CGRect (x: 100, y: 100, width: 100, height: 100)) –

1

Burada geç olabilir ama ben ne kullanın: -

CGRect labelFrame = CGRectMake(120,300, 530, 100); 
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame]; 
//If you need to change the color 
[myLabel setTextColor:[UIColor whiteColor]]; 
//If you need to change the system font 
[myLabel setFont:[UIFont fontWithName:NULL size:23]]; 
//If you need alignment 
[myLabel setTextAlignment:NSTextAlignmentCenter]; 
// The label will use an unlimited number of lines 
[myLabel setNumberOfLines:0]; 
//Add label view to current view 
[self.view addSubview:myLabel]; 
NSString *someString = @"Sample String, Yarp!"; 
myLabel.text = someString;