2010-07-09 29 views
25

Tôi có một số UIView mà tôi muốn thêm một vài bit văn bản vào. Tôi đã sử dụng một UITextView nhưng tôi nghĩ rằng đó là quá mức cần thiết vì nó không cần phải chỉnh sửa được. Tôi đã nghĩ đến việc sử dụng một số UILabel hoặc UITextField, nhưng tôi không thấy cách bạn cho người giám sát biết vị trí của mình ở vị trí UILabel hoặc UITextField. Tôi muốn các đối tượng dấu chân thấp nhất mà sẽ cho phép tôi đặt văn bản của một font/màu/kích thước của sự lựa chọn của tôi trong UIView của tôi, nơi tôi muốn nó. Không quá nhiều để hỏi, eh?Cách lập trình thêm văn bản vào UIView

Trả lời

60

Phương pháp đơn giản nhất cho bạn sẽ là:

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]; 

tòa nhà hoặc Populating Lần trong mã của bạn có thể sẽ yêu cầu bạn phải sử dụng CGRectMake rất nhiều. Như tên gọi của nó, nó tạo ra một hình chữ nhật mà bạn có thể sử dụng để đặt vị trí tương đối (tương ứng với đường viền của superview) và kích thước của UIView-Subclass (trong trường hợp này là UILabel).

Nó hoạt động như thế này:

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

x xác định khoảng cách giữa đường viền trái của SuperView và đầu subview về của bạn để thêm, cùng áp dụng cho y nhưng liên quan đến khoảng cách giữa các hàng đầu -border của superview của bạn. sau đó chiều rộng và chiều cao là tự giải thích tôi nghĩ.

Hy vọng điều này sẽ giúp bạn đi đúng hướng.

+1

Tôi nhìn lên cả UILabel và UITextField trong tài liệu và thấy rằng họ kế thừa từ ... UITextField: UIControl: UIView: UIResponder: NSObject UILabel: UIView: UIResponder: NSObject Vì vậy, tôi đoán rằng kể từ khi họ cả hai kế thừa từ UIView, rằng họ có tất cả các thuộc tính mà UIView có? ... cộng với các tính năng bổ sung mà họ nhận được trên đường đi? này có ý nghĩa, nhưng trong tài liệu hướng dẫn cho UILabel, Apple không liệt kê bất kỳ phương pháp khác hơn - (void) drawTextInRect: (CGRect) rect và - (CGRect) textRectForBounds: (CGRect) tiếp giáp – Steve

+0

(hộp Comment quá nhỏ đối với những người giống như tôi ...) Tôi có an toàn để giả sử rằng tôi có quyền truy cập vào tất cả các thuộc tính của mọi siêu lớp lên chuỗi cho NSObject đối với bất kỳ lớp nào tôi sử dụng không? Cảm ơn sự giúp đỡ, nó được đánh giá cao! – Steve

+0

bạn đúng, đây chính là cách thức hoạt động của kế thừa. Tôi vẫn không nhận được những gì bạn muốn đạt được với drawTextInRect vv Một UILabel (Hoặc một UITextview cho rằng vấn đề) là Views cung cấp cho bạn chức năng cho phép bạn thiết lập văn bản một cách rất dễ dàng. Có lẽ tôi chỉ không thấy vấn đề ở đây :). – samsam

0

thêm UILabel vào Chế độ xem của bạn. sau đó ghi đè phương thức layoutSubviews của Chế độ xem.

8

Thay vì tìm cách để cho biết vị trí đặt nhãn UILabel, bạn có thể cho UILabel biết vị trí của bản thân trong chế độ xem bằng cách sử dụng "center".

Ví dụ:

myLabel.center = CGPointMake(0.0, 0.0); 

Hy vọng bạn sẽ có thể sử dụng UILabel, với tôi đó là dạng cơ bản của văn bản không thể chỉnh sửa linh hoạt.

+0

Cảm ơn - một cách gọn gàng, ngắn gọn để đặt nó. Tôi có đúng trong suy nghĩ rằng những thứ như UILabel mang ít chi phí hơn một UIView đầy đủ? Bây giờ tôi (nghĩ rằng tôi) nhận ra rằng nó kế thừa từ UIView, đây có phải là một giả định bị lỗi không? – Steve

+1

Steve, tôi nghĩ bạn là một người cầu toàn và điều đó tốt. Nhưng dòng suy nghĩ của chúng tôi khá khác nhau, UILabel đã có sẵn cho bạn như một sự tiện lợi, được kiểm tra đầy đủ. UIView đang thực hiện nó theo cách cấp thấp hơn.Có, nó có thể có nghĩa là chi phí ít hơn, nhanh hơn, ít sử dụng bộ nhớ hơn, nhưng với nỗ lực và lỗi có thể xảy ra, có đáng không? Tôi đề nghị sử dụng UILabel nếu nó đáp ứng nhu cầu của bạn, trừ khi bạn sẽ hiển thị hàng ngàn người trong số họ sau đó bạn có thể suy nghĩ lại chiến lược của bạn bằng cách sử dụng một cách hiệu quả hơn để làm việc. – Manny

2

Câu hỏi này là cũ, nhưng cho một tùy chọn văn bản UIView thuần túy mà không sử dụng UILabel hoặc UITextField (như tất cả các câu trả lời khác mô tả, nhưng câu hỏi là làm thế nào để làm điều đó mà không có chúng), drawRect trong một UIView lớp con làm việc cho tôi. Cũng giống như vậy:

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

Tôi lấy lại điều này ngay bây giờ - Thực ra điều này không được khuyến khích từ iOS 7, Apple nói "Nhiều bản vẽ bổ sung cho lớp NSString không còn được ưu tiên cho các biến thể mới hơn". có nghĩa là drawAtPoint: WithFont không phải là cách tốt nhất để vẽ nsstring vào Uiview. – entire

+0

Bạn có thể sử dụng - (void) drawAtPoint: (CGPoint) point withAttributes: (NSDictionary *) attrs NS_AVAILABLE_IOS (7_0); đối với iOs7 và sau đó là – goelectric

1

này thường hiển thị một văn bản ở một vị trí XY

-(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

Đối Swift:

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

cho nhanh 3 chỉ thay đổi cú pháp UILabel thành UILabel (khung: CGRect (x: 100, y: 100, chiều rộng: 100, chiều cao: 100)) –

1

Nó có thể là muộn nhưng đây là những gì tôi sử dụng: -

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; 
Các vấn đề liên quan