2013-02-22 41 views
16

Xin chào, tôi có một MBProgressHUD trên màn hình iPad của mình. Hoạt động hoàn hảo tốt. Nhưng tôi muốn thay đổi nhãn để hiển thị trong ba lines.Like nàyMBProgressHUD để hiển thị văn bản nhãn trên nhiều dòng

self.hud = [[MBProgressHUD alloc] initWithView:self.navigationController.view]; 
self.hud.frame = CGRectMake(0, 0, 120, 143); 

[self.navigationController.view addSubview:self.hud]; 
self.hud.delegate = self; 
self.hud.mode = MBProgressHUDModeAnnularDeterminate; 
NSString *strloadingText = [NSString stringWithFormat:@"Loading Data.\r Please Wait.\r 1-2 Minutes"]; 
NSLog(@"the loading text will be %@",strloadingText); 
self.hud.labelText = strloadingText; 
[self.hud show:YES]; 

Vì vậy, tôi muốn các nhãn trong 3 dòng

Đang tải dữ liệu.

Please Wait

1-2 Minutes

HOẶC tôi có thể gán một hình ảnh để HUD?

Tất cả điều này phải ở trong labeltext. Nhưng tôi kết thúc với chỉ một dòng. Làm thế nào tôi có thể làm điều đó? Nếu bạn cần thêm thông tin, vui lòng hỏi.Thanks.

+0

Hãy thử với '[Chuỗi ký tự kết nốiWithFormat: @" Đang tải dữ liệu. \ N Vui lòng đợi. \ N 1-2 phút "]'. Không chắc chắn nếu nó được xử lý trong MBProgressHUD. – iDev

+0

@ ACB.I đã thử. Vẫn trong cùng một dòng. – RookieAppler

+0

Sau đó, bạn có thể phải sửa đổi cài đặt MBProgressHUD. Kiểm tra xem có bất kỳ tùy chọn nào có sẵn cho việc này hay không. – iDev

Trả lời

34

Chi tiết của MBProgressHUD Thuộc tính textText là nhiều dòng nhưng không phải thuộc tính labelText.

Vì vậy, bạn có thể thử một cái gì đó như thế này

MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
hud.frame = CGRectMake(0, 0, 120, 143); 

hud.mode = MBProgressHUDModeAnnularDeterminate; 
NSString *strloadingText = [NSString stringWithFormat:@"Loading Data."]; 
NSString *strloadingText2 = [NSString stringWithFormat:@" Please Wait.\r 1-2 Minutes"]; 

NSLog(@"the loading text will be %@",strloadingText); 
hud.labelText = strloadingText; 
hud.detailsLabelText=strloadingText2; 

Bạn có thể đặt detailsLabelText phông chữ bằng cách sử dụng tài sản detailsLabelFont.

+1

Điều đó thật thú vị. Trong tò mò, tôi đã xem qua nguồn cố gắng tìm ra lý do tại sao detailsLabelText lại đa dạng nhưng labelText không và không thể thấy bất kỳ sự khác biệt nào. Bạn có biết tham số nào làm cho một multiline và tham số kia không? – hkatz

+2

Tham số là numberOfLines. Đặt nó như vậy: label.numberOfLines = 0; –

3

Lý do tại sao labelText khác với detailsText, tôi tưởng tượng vì nó có nghĩa là rất giống với UIAlertView từ góc nhìn tiêu đề/mô tả.

Sự khác biệt giữa hai nhãn là khá khác biệt vì mục đích của họ, ví dụ:

  • tựa đề có phông chữ lớn hơn, thời gian thường được in đậm trong so sánh với các văn bản chi tiết.
  • Titles có nghĩa là để được ngắn gọn và rõ ràng, lấy từ một trang web từ điển phổ biến (mô tả nói cho chính nó):

Title: Tên mô tả; một biểu tượng.

Tôi khuyên bạn không nên có tiêu đề nhiều dòng, giữ tiêu đề ngắn và sử dụng văn bản mô tả.

Lý do tại sao tiêu đề nhiều dòng không hoạt động là do triển khai layoutSubviews, kích thước không được tính toán. nếu bạn kiểm tra MBProgressHud.m, trong layoutSubviews,

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); 
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font 
          constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode]; 
totalSize.width = MAX(totalSize.width, detailsLabelSize.width); 
totalSize.height += detailsLabelSize.height; 
if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) { 
    totalSize.height += kPadding; 
} 

Lưu ý: -[NSString sizeWithFont: constrainedToSize: lineBreakMode:] gọi cho văn bản mô tả; phương pháp này tính toán kích thước cần thiết để hiển thị văn bản - sử dụng nhiều dòng nếu cần, trong khi -[NSString sizeWithFont:] tính toán kích thước cần thiết để hiển thị văn bản, nhưng chỉ hiển thị một dòng.

Tôi khuyên bạn không nên có tiêu đề nhiều dòng và thay vào đó cung cấp tiêu đề ngắn hơn, với một số văn bản mô tả đi kèm với nó.

Nếu bạn chỉ cần có tiêu đề nhiều dòng (tất cả thay đổi trong MBProgressHud.m):

- (void)setupLabels { 
label = [[UILabel alloc] initWithFrame:self.bounds]; 
label.adjustsFontSizeToFitWidth = NO; 
label.textAlignment = MBLabelAlignmentCenter; 
label.opaque = NO; 
label.backgroundColor = [UIColor clearColor]; 
label.textColor = [UIColor whiteColor]; 
label.font = self.labelFont; 
label.text = self.labelText; 
>>> label.numberOfLines = 0; 
[self addSubview:label]; 
    ... 

Thay thế:

CGSize labelSize = [label.text sizeWithFont:label.font]; 
labelSize.width = MIN(labelSize.width, maxWidth); 
totalSize.width = MAX(totalSize.width, labelSize.width); 
totalSize.height += labelSize.height; 
if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { 
    totalSize.height += kPadding; 
} 

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); 
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font 
          constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode]; 

Với:

CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); 

CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode]; 
totalSize.width = MAX(totalSize.width, labelSize.width); 
totalSize.height += labelSize.height; 

if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { 
    totalSize.height += kPadding; 
} 

remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; 
CGSize detailsLabelSize = [detailsLabel.text sizeWithFont:detailsLabel.font 
          constrainedToSize:maxSize lineBreakMode:detailsLabel.lineBreakMode]; 

Hy vọng điều này không phải là quá muộn để giúp đỡ.

1

Tôi cũng có câu hỏi như thế này!

Bạn có thể đặt hud.label.numberOfLines = 0;

Và nó hoạt động!

0

self.hud.minSize = CGSizeMake (300, 100);

Các vấn đề liên quan