0

UIButton の非常に単純なサブクラスを作成して機能を追加したいのですが、ストーリーボードで使用すると、ボタンの境界線が消えてしまいます。

いくつかのテストの後、完全に空のインターフェースと実装であっても、カスタム UIButton サブクラスを使用するとこの効果があるようです。

簡単に再現できます。次の手順を試してください。

1) 新しいシングル ビュー アプリケーションを作成します
。2) ストーリーボードのビューの中央に UIButton を追加します
。3) シミュレーターで実行します。

予想どおり、境界線のある UIButton が表示されます。今...

4) 次のように、空のインターフェイス宣言と空の実装を使用して、SomeUIButtonClass という名前の UIButton サブクラスを作成します。

SomeUIButtonSubclass.h:

#import <UIKit/UIKit.h>

@interface SomeUIButtonSubclass : UIButton

@end

SomeUIButtonSubclass.m:

#import "SomeUIButtonSubclass.h"

@implementation SomeUIButtonSubclass

@end

5) ストーリーボードで、前に追加したボタンを選択し、Identity Inspector の [カスタム クラス] で、クラスを に設定しSomeUIButtonSubclassます。
6) シミュレーターで再度実行します。

境界線のないボタンが表示されます。

iOS 開発のクレイジーさに慣れてきましたが、これはいつもよりもさらに狂っています。

なぜこれが起こるのか、それを防ぐために何をする必要があるのか​​?

4

1 に答える 1

1

この原因は、ペン先からロードされた UIButton のサブクラスが適切に初期化されていない でUIButton説明されているように、ストーリーボードから選択できるの「タイプ」が実際にはUIButtonサブクラスとして実装されているためです。UIButtons にはデフォルトで境界線がありません。境界線は「システム」または「丸みを帯びた四角形」タイプから取得されます。

インターフェースビルダーで型を選択するコードベースの同等のドキュメントは、これを示唆しており、これらの「型」はカスタムサブクラスと互換性がないという事実を示しています。

ボタンの種類:

...

このメソッドは、特定の構成を持つボタン オブジェクトを作成するための便利なコンストラクターです。をサブクラス化する場合UIButton、このメソッドはサブクラスのインスタンスを返しません。

Interface Builder で「タイプ」とカスタム クラスの両方を設定すると、iOS はタイプを完全に無視し、明示的に指定されたサブクラスを優先します。

于 2014-04-20T16:13:10.140 に答える