1

ナビゲーション バーと AppDelegate ファイルのボタンをカスタマイズしようとしています。

// first I am customizing the done button

    [[UIBarButtonItem appearance] setBackgroundImage:buttonDone forState:UIControlStateNormal style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:buttonDonePressed forState:UIControlStateHighlighted style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault];


//and then I am customizing the back button


    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonBack forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonBackPressed forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

[_UIBarItemAppearance setBackgroundImage:]: unrecognized selector sent to instance完了ボタンを取得しています。奇妙なことに、戻るボタンのカスタマイズは機能しますが、完了ボタンのカスタマイズはアプリをクラッシュさせます。理由はありますか?

* PS buttonDone、buttonDonePressed、buttonBack、buttonBackPressed は、私が作成した 4 つの UIImage です*

更新: iOS 5.0 シミュレーターではアプリがクラッシュしますが、6.0 では動作します。5.0 でのクラッシュを回避するために何ができるかについて何か提案はありますか?

4

1 に答える 1

1

ドキュメントから、この署名はiOS 6.0+からのみ利用可能です

次の方法で、オブジェクト メソッドの可用性をテストできます。

[obj respondsToSelector:@selector(<methodName>)]

だから試してみてください:

id item = [UIBarButtonItem appearance];
if ([item respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)]) {
   // Use new signature
 } else {
   // Use old signature
 }
于 2012-11-08T15:17:56.470 に答える