「スーパー オブジェクト」のいくつかを、単一の (または少なくとも限定された) 責任を持つ、より管理しやすいクラスに分割しようとしています。
私が遭遇した問題の 1 つは、UIBarButtonItem の特定のインスタンスのオブジェクトを作成することです。現在のクラスでは、最初にUIButtonを定義し、次にそのボタンのアイコンとして機能するすべての画像をサブビューとして定義します(たとえば、ボタンはデバイスへのアクセス/制御を表し、ボタン画像を使用してそのデバイスの現在の信号強度)。また、そのボタンは、デバイス オブジェクトからの NSNotifications をリッスンして、信号強度の変化、またはデバイスの切断を表します。ボタンを押すと、切断するようにデバイスにメッセージが送信されます。このコードはすべて、RootViewController のプロパティとして完全に機能するようになりました。ただし、ボタンは複数のクラスで共有されているため、独自のクラスに引き出したいと考えており、不要なメソッドでコントローラーが乱雑になっています。
以下のようなinitで別のクラスを作ってみました。ただし、ボタンに使用される自己が [UIBarButtonItem alloc] によって最終的に作成される自己と同じではないため、これは機能しません。また、NSNotification またはボタンの押下のいずれかが「自己」のセレクターにメッセージを送信しようとすると、これは機能しません。 、そのオブジェクトは既に割り当て解除されています。問題は、オブジェクトのプロパティ (現在は RootViewController 用) ではなく、別のクラスの単なるインスタンスであるオブジェクト (クラスによって定義されている) を作成する方法がわからないことです。
私の問題の編集と追加の説明
MyClass は現在、UIBarButtonItem のサブクラスです。ただし、[[MyClass alloc] initWithCustomView:] のように使用するつもりはありません。[MyClass alloc] init] だけでカスタム ビューを完全に作成する必要があります。つまり、このクラスの要点は、このボタンがそれ自体を作成し、そのサブビューを管理し、適切なアクションを実行するために必要なすべてを完全に含めることです。押されたとき。([MyClass setupButton] のようなパブリック メソッドと UIBarButtonItem 型のパブリック プロパティを使用して、MyClass を NSObject にすることは簡単にできます。ただし、クラスはボタンを作成するためだけに存在し、ボタンではないため、これは間違っているように見えます。自体。)
@interface MyClass : UIBarButtonItem
@end
@implementation MyClass
- (id)init {
if (self = [super init]) {
UIImage *defaultButton = [[UIImage imageNamed:@"...
UIImage *defaultButtonPressed = [[UIImage imageNamed:@"....
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 30)];
[button setBackgroundImage:defaultButton forState:UIControlStateNormal];
[button setBackgroundImage:defaultButtonPressed forState:UIControlStateHighlighted];
[button addTarget:self action:@selector(deviceButtonPressed) forControlEvents:UIControlEventTouchUpInside];
//Then several UIImageViews that are added as subviews of the button, initially hidden
//Then set up the NSNotification listener
//Finally
self = [[UIBarButtonItem alloc] initWithCustomView:button];
}
return self;
}
//Then several functions to handle hiding and unhiding the subviews depending on the received device notifications, and a function to handle the button press and sending the message back to the device.