2013-03-24 30 views
15

Tôi có một chế độ xem duy nhất có phần tử giao diện người dùng duy nhất là UITextView. Trong viewDidLoad: tôi tạo ra một chuỗi gán với "Văn bản \ n" và đặt văn bản do độ xem văn bản của như vậy:NSAttributedString ' n' bỏ qua

NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"Text\n"]; 
[self.textView setAttributedText:string]; 

Vấn đề của tôi là các ngắt dòng bị bỏ qua khi tôi chạy ứng dụng.

Nếu tôi sử dụng NSStringsetText: điều đó không xảy ra.

NSString *string = [[NSString alloc] initWithString:@"Text\n"]; 
[self.textView setText:string]; 

Có ai có thể làm sáng tỏ những gì đang xảy ra không? Tôi không thể tìm thấy bất cứ điều gì trong tài liệu hoặc cách khác.

Trả lời

5

Bạn có thể sử dụng này:

NSAttributedString *cr = [[NSAttributedString alloc] initWithString: @"\n"]; 

Vì vậy, nếu bạn có hai NSAttributedString (string1 và string2), bạn có thể làm:

[string1 appendAttributedString: cr]; 
[string1 appendAttributedString: string2]; 

Thật kinh khủng và không thanh lịch .... nhưng nó hoạt động !!!

+0

'NSAttributedString' không thể sử dụng' appendAttributedString' vì nó không thể thay đổi. Có sử dụng đúng 'NSMutableAttributedString' không? – Penguin

2

tôi sẽ khuyên bạn nên sử dụng:

[[NSAttributedString alloc] initWithHTML:[@"Text<BR />" dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:NULL]; 

tôi sử dụng tất cả thời gian và nó hoạt động hoàn hảo. Tôi thậm chí làm một macro ra khỏi nó:

#define html2AttributedString(htmlString)                 \ 
    [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]   \ 
    documentAttributes:NULL] autorelease] 

Và sau đó, bạn có thể làm vĩ mô cho màu sắc, liên kết, phông chữ, vv ...

Nói tóm lại, bạn chỉ cần thay thế tất cả các "\n" trong chuỗi của bạn với <BR /> và sử dụng mã được cung cấp ở trên. Đối với phần thay thế, sử dụng:

[yourString stringByReplacingOccurrencesOfString:... withString:…]; 

Đối với iOS, bạn có thể xem this page để thay thế.

Phương pháp initWithHTML của chúng tôi nhằm hoàn toàn khớp với đầu ra từ phiên bản Mac. Điều này có thể đạt được cho nhân vật và tôi có kiểm tra đơn vị tại chỗ mà làm cho một số điều này giữ được hoàn hảo. Về các thuộc tính có nhiều việc phải làm hơi khác trên iOS để đạt được cùng một giao diện. Tôi sẽ không làm phiền bạn cùng với chi tiết ở đó.

+1

Phương pháp ‘initWithHTML:’ không khả dụng trong iOS. – rmaddy

+0

Phải. Tôi đã chỉnh sửa bài đăng để cung cấp thay thế. – Jean

+0

Tại thời điểm này tôi quan tâm nhiều hơn với sự hiểu biết tại sao tôi không nhận được hành vi mong đợi nhưng tôi sẽ ghi nhớ điều này nếu tôi cuối cùng phải làm việc xung quanh nó. – winsome