0

別のクラスで UIImageView のアルファを設定したい。Class1.h には、IBAction の Class2.m で変更する必要がある UIImageView があります。UIImageView の最初のアルファは 1 です。これは、エラーがないにもかかわらず機能しない私のコードです。

Class1.h
{
IBOutlet UIImageView *Livello2Image;
}
-(void)setAlpha:(int)a;

Class1.m
- (void)setAlpha:(int)a
{
Livello2Image.alpha = a;
}

Class2.m
-(IBAction)ALP{
Class1 *class = [[Class1 alloc]init];
[class setAlpha: 0];}

私の英語に感謝し、申し訳ありません。

4

2 に答える 2

0

あなたがするClass2とき

Class1 *class = [[Class1 alloc]init];

これにより、新しいインスタンスが作成Class1され、そのアルファが設定されます (この新しいインスタンスは、ARC 設定に応じて破棄またはリークされます)。Class1変更する必要がある既存のインスタンスが既にあるため、これはあなたが望むものではありません。つまり、インスタンスへの参照 (ポインター) が必要です。

インスタンスを作成するときはClass2、インスタンスへの参照を与える必要がありClass1ます。Class2参照を格納するプロパティが必要です。


したがって、ViewControllerクラスで実装する必要がありますprepareForSegue:sender:ProvaViewControllerこれにより、 (via )の新しいインスタンスが得られますsegue.destinationViewControllerProvaViewControllerプロパティを( )に追加し、その@property (strong, nonatomic) ViewController *viewController;プロパティを使用してアルファ ( [self.viewController Trasparenza:0];) を変更する必要があります。

ただし...「戻る」ボタンは、実際に戻るのではなく、新しいView Controllerをモーダルにプッシュしているように見えます(現在のビューもモーダルに表示されるため、閉じます)。ビュー コントローラの構造について考える必要があるのは、現在少しおかしくなっているからです...


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:...]) {
        [(ProvaViewController *)segue.destinationViewController setViewController:self];
    }
}

こちらのガイド、特に「詳細シーンにデータを送信する」セクションをお読みください。

于 2013-07-02T23:38:24.163 に答える