Perubahan labelAlignment
properti mungkin terkait dengan pengenalan NSAttributedStrings dari Apple ke lebih banyak kontrol iOS, dan oleh karena itu perlu mengubah properti UIText… menjadi NSText… properti.
Jadi, jika Anda meningkatkan ke iOS6, Anda sedang dalam semanggi; hanya beralih dari UITextAlignmentCenter
ke NSTextAlignmentCenter
dan menikmati string baru yang mewah.
Tetapi jika Anda bekerja dengan proyek yang kompleks dan lebih suka bumi tidak terlalu bergerak, Anda mungkin ingin tetap menggunakan versi yang lebih lama untuk sementara waktu, dan mengadaptasi kode Anda untuk beberapa versi, seperti ini:
// This won't compile:
if ([label respondsToSelector:@selector(attributedText:)])
label.textAlignment = UITextAlignmentCenter;
else
label.textAlignment = NSTextAlignmentCenter;
Pendekatan di atas bekerja untuk metode baru ; Anda mendapatkan peringatan tetapi semuanya berjalan dengan baik. Tetapi ketika kompiler melihat konstanta yang tidak diketahuinya, ia berubah merah dan berhenti di jalurnya. Tidak ada cara untuk menyelinap NSTextAlignmentCenter
melewatinya. (Yah, mungkin ada cara untuk menyesuaikan perilaku kompiler di sini, tetapi tampaknya tidak disarankan.)
Solusinya adalah menambahkan beberapa definisi preprocessor bersyarat. Jika Anda meletakkan sesuatu seperti ini di file h kelas Anda (atau mungkin dalam file konstanta yang diimpor - yang harus dengan sendirinya disertakan #import <UIKit/UIKit.h>
agar pernah tahu tentang NSText ... konstanta) ...
#ifdef NSTextAlignmentCenter // iOS6 and later
# define kLabelAlignmentCenter NSTextAlignmentCenter
# define kLabelAlignmentLeft NSTextAlignmentLeft
# define kLabelAlignmentRight NSTextAlignmentRight
# define kLabelTruncationTail NSLineBreakByTruncatingTail
# define kLabelTruncationMiddle NSLineBreakByTruncatingMiddle
#else // older versions
# define kLabelAlignmentCenter UITextAlignmentCenter
# define kLabelAlignmentLeft UITextAlignmentLeft
# define kLabelAlignmentRight UITextAlignmentRight
# define kLabelTruncationTail UILineBreakModeTailTruncation
# define kLabelTruncationMiddle UILineBreakModeMiddleTruncation
#endif
…kamu bisa melakukan ini:
label.textAlignment = kLabelAlignmentCenter;
Dan ini:
label.lineBreakMode = kLabelTruncationMiddle;
Dll
Karena perubahan UIText / NSText ini cenderung muncul untuk beberapa kontrol, pendekatan ini cukup berguna.
(Peringatan: Menjadi anggota pecinta mapan di bumi yang disebutkan di atas, saya telah menguji ini dengan versi lama, tetapi belum dengan iOS6.)
NSTextAlignment
.