1

UIButton の textLabel に linebreakmode を設定しようとしています。

self.scheduleButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;

NSLineBreakByWordWrappingiOS 6.0 より前では使用できません。

self.scheduleButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;

iOS6 より前では動作しますが、XCode はエラーをスローしており、認識されませんUILineBreakModeWordWrap

iOS 6 より前に UILineBreakModeWordWrap コードが完全に無視されるようにするにはどうすればよいですか。

OS のバージョンを確認するマクロを作成しました。メソッドの場合は、respondsToSelector を使用していましたが、これは列挙型です。

SYSTEM_VERSION_LESS_THAN(@"6.0")

ここではこれを使用していますが、if-else シナリオで使用していますが、XCode から UILineBreakModeWordWrap が認識できないことが通知されるため、まだ機能しません。

前処理レベルでOSのバージョンを知る方法はありますか?

#define SYSTEM_VERSION_LESS_THAN(v)                ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

私が作成したこのマクロは、実行時にチェックが行われることを意味する OS タイプを決定する目的の C コードを追加するだけです。

しかし、このため XCode は無視しませんUILineBreakModeWordWrap

4

2 に答える 2

1

オプション1

これを処理する独自のマクロを作成できます。

#ifdef __IPHONE_6_0
# define LINE_BREAK_MODE_WORD_WRAP NSLineBreakByWordWrapping
#else
# define LINE_BREAK_MODE_WORD_WRAP UILineBreakModeWordWrap
#endif

LINE_BREAK_MODE_WORD_WRAPをコードで使用できるようになりました

オプション:2

参照名の代わりに列挙値を直接使用します。 と の両方NSLineBreakByWordWrappingUILineBreakModeWordWrap同じ値 - 0を持っています

したがって、この方法で直接書くこともできます-

self.scheduleButton.titleLabel.lineBreakMode = 0;

iOS SDK 列挙リファレンスから 0 番目の値を自動的に取得します。

お役に立てれば。

于 2013-08-13T06:54:28.037 に答える