2010-02-02 8 views
17

Đang cố gắng để hiển thị một chuỗi hebrew rằng bắt đầu với một số, luôn luôn hiển thị số ở phần cuối của chuỗi như sau: 1. יום שישי בבוקרRTL cho thấy con số vào cuối dòng

nhưng tôi cần số được hiển thị ở phía bên phải của văn bản-

bất kỳ giải pháp nào cho điều đó?

Nó xảy ra với UILabel & UITextField & UITextView

và cố gắng để viết số ở phía bên trái cũng sản xuất các resault cùng.

Phát với sự kết hợp của UITextAlignment sẽ không hữu ích.

+0

Xem http://stackoverflow.com/questions/1553248/iphone-and-right-to-left-text. Thật không may, không có câu trả lời cho đến nay. – kennytm

+0

Cảm ơn nhưng nó không phải là cùng một isuue. – Tiger

+0

Whoa, thật kỳ lạ! Điều gì xảy ra nếu bạn có một số ở giữa tiếng Do Thái, hoặc ở đầu chuỗi nhưng sau một khoảng trống? – lawrence

Trả lời

0

không chắc chắn nếu có cách fancier để làm điều này nhưng bạn có thể muốn thử một cái gì đó như thế này:

NSString *test = @"12. just a teststring"; 
NSString *number = [test substringToIndex: [test rangeOfString: @" "].location]; 
NSString *text = [test substringFromIndex: [test rangeOfString: @" "].location]; 
test = [NSString stringWithFormat: @"%@ %@", text, number]; 
// test == "just a teststring 12." 
+0

Cảm ơn bạn rất nhiều nhưng nó không phải là vấn đề. Nó sẽ hiển thị sai bất kể tôi sẽ cố gắng đặt hàng như thế nào. Mọi thứ với màn hình hebrew trên màn hình. Để kiểm tra: 1. יום שישי בבוקר Và: י .1 .יום שישי בבוקר Sẽ được hiển thị giống như trên màn hình – Tiger

22

Bạn không cần phải thay đổi bất kỳ thiết lập trên UILabel, chỉ cần đặt các nhân vật với unicode 0x200F trước chuỗi của bạn. Đây là lý do:

Trong Unicode nhiều ký tự có một hướng cụ thể, cho phép hệ thống biết nó phải được viết, nói LTR, như سلام. Đoạn văn thường sử dụng hướng của ký tự đầu tiên. Đó là lý do tại sao chuỗi của bạn không có số được nhập từ phải sang trái tự động.

Bây giờ, một số ký tự, như số, có định hướng "yếu", do đó về cơ bản, chúng có tính chất xung quanh. Khi bạn nhập "1. בבוקר", hệ thống đầu tiên nhìn thấy 1, do đó, có hướng LTR thông thường. Thay đổi căn chỉnh sẽ không hữu ích, vì nó chỉ thay đổi toàn bộ văn bản sang phải hoặc giữa.

Để giải quyết vấn đề này, Unicode có hai ký tự đánh dấu (LTR: 0x200E, RTL: 200F). Đây là vô hình, nhưng dictate hướng. Vì vậy, trong khi "1. בבוקר" là ...

  1. בבוקר

nếu bạn gõ "# x200F" + "1. בבוקר" nó sẽ hiển thị như thế này:

1. בבוקר

+0

Chúng ta có thể trộn lẫn RTL & LTR vào một UITextView không? Dường như chỉ có ký tự đánh dấu đầu tiên (LTR hoặc RTL) được phân tích cú pháp nên tôi không thể hiển thị văn bản được viết hai chiều (một dòng trong LTR, dòng thứ hai trong RTL và các thirs trong LTR lại) – konradowy

+0

cảm ơn bạn, điều này giải quyết vấn đề của tôi, nhưng nơi bạn đã nhận được thông tin này từ, tôi tìm kiếm rất nhiều cho đến khi tôi tìm thấy bài viết của bạn. – DeyaEldeen

+0

Cảm ơn bạn, điều này đã thực sự giúp tôi giải quyết một lỗi mà tôi đã trải qua quá lâu. Bây giờ tôi có thể đóng hơn 20 tab ;-) – adnan

15

Xây dựng về câu trả lời tuyệt vời Mo:

Đây là mã obj-C:

NSString *RTFstr = "1. בבוקר"; //This could be any right-to-left string 
NSString *directionalString = [@"\u200F" stringByAppendingString:[note text]]; 
[someUITextView setString:directionalString]; 

Và nó thực sự hoạt động ...

+0

Chèn mã này trước chuỗi không hoạt động đối với tôi. –

6

Tôi đã có một vấn đề hơi khác nhau nhưng Mo trả lời đã cho tôi manh mối.

Tôi muốn nhận được văn bản LTR (như "abcd") được hiển thị theo hướng RTL ("dcba") mà không phải tự làm việc đảo ngược chuỗi. Hóa ra bao quanh chuỗi giữa \u202E\u202C.

Tôi cũng khuyên bạn nên đọc trang sau vì nó đưa ra một lời giải thích rất tốt của tất cả các kỳ diệu unicode:

http://www.iamcal.com/understanding-bidirectional-text/

+0

Điều này làm việc hoàn hảo –

5

Swift ai?

extension String { 
    func stringByForcingWritingDirectionLTR() -> String { 
     return "\u{200E}".stringByAppendingString(self) 
    } 

    func stringByForcingWritingDirectionRTL() -> String { 
     return "\u{200F}".stringByAppendingString(self) 
    } 
} 
+0

giải pháp này không hoạt động – JAHelia