2

を別のクラスから変更alphaしようとしています。UIButtonUIButtonのプロパティを設定して呼び出される関数は、実際に呼び出されます。これは、そこに を配置し、その動作を確認できるためです。何か提案をいただければ幸いです。alphaNSLog

これが私の現在のコードです。

ViewController.h

- (void) setAlphaToButton;

@property (strong, nonatomic) IBOutlet UIButton *myButton;

ViewController.m

@synthesize myButton;

- (void) setAlphaToButton {
    myButton.alpha = 0.5;
    NSLog(@"Alpha set");
}

ImageViewSubclass.m

- (void) tapDetected:(UITapGestureRecognizer *)tapRecognizer {
    ViewController *VC = [[ViewController alloc] init];
    [VC setAlphaToButton];
}

画像ビューが押されると、コンソールに次のように表示されますAlpha set。そして、ボタンは変更されません。

4

3 に答える 3

2

コードでは、ViewController のインスタンスが割り当てられて初期化され、メソッド setAlphaToButton が呼び出されます。次に、View Controller を保持するオブジェクトがないため、View Controller が解放されます。効果が見られないのはそのためです。メソッドを呼び出す ViewController インスタンスが画面に表示されることはありません。

コードがどのように機能するかは明確ではありません。tapDetected が呼び出されたときに ViewController のインスタンスが存在しますか? これが事実であり、これがボタンのアルファを変更したい ViewController である場合、ViewController のそのインスタンスへの参照を取得し、それに対して setAlphaToButton を呼び出す必要があります。

于 2013-02-23T19:41:49.030 に答える
0

アルファを設定しようとした時点でビューがロードされていません! viewDidLoad が起動した後に、このメソッドを呼び出す必要があります。ビューを呼び出すことで強制できますが、ハックのようなものであり、お勧めしません!

MyViewController *vc = [MyViewController new];
vc.view; // this string will force view loading 
[vc setAlphaToButton];
于 2013-02-23T21:03:57.050 に答える
0

imageviewsubclass に uiviewcontroller クラスのプロパティを次のように追加します。

ImageViewSubclass.h
@propery (nonatomic, retain) uiviewController *parent;
ImageViewSubclass.m
@synthesize parent;

そして、imageviewsubclassのオブジェクトを初期化し、ビューに追加するときに、View Controllerクラスで「self」で初期化します

ImageViewsubclass *oneObj = [ImageViewsubClass alloc] init];
oneOBj.parent = self;

ImageviewsubClass オブジェクトのすべてのオブジェクトに対して同じことを行います。

そして

- (void) tapDetected:(UITapGestureRecognizer *)tapRecognizer {
    [parent setAlphaToButton];
}
于 2013-02-25T09:38:58.613 に答える