0

別のViewControllerのUILabelプロパティを変更するにはどうすればよいですか?

#import "SecondViewController.h"FirstViewController.mファイルにインポートしてから

FirstViewControllerのメソッドに次のものがあります

-(IBAction) someAction {

    SecondViewController *objV1 = [[SecondViewController alloc]init];

    objV1.secondViewControllerLabel.alpha = 0.2;

NSLog(@"someAction");

}

someActionが呼び出されると、SecondViewControllerのUILabelには何も起こりません。

また、この例では、1番目と2番目の両方のビューコントローラーがMainViewControllerと呼ばれる別のビューコントローラーにあります。したがって、両方が同時に画面に表示されます。

助けてくれてありがとう。

4

3 に答える 3

1

@Golesの回答は機能しますが、FirstViewController.mからの変更を具体的にトリガーする場合は、何らかの方法でSecondViewControllerへの参照を渡す必要があります。

したがって、2番目のビューコントローラーへの参照をパラメーターとして受け取るカスタムinitを使用してこれを行うか、外部から設定できるFirstViewControllerにプロパティを作成できます。これは次のようになります。

FirstController.h:

@interface
..
@property (strong, nonatomic) UIViewController *second;
...
@end

FirstController.m:

@implementation
@synthesize second 

親のViewControllerで、両方の子のView Controllerを作成し、次のようにします。

ViewController1.second = ViewController2;

次に、アクションメソッドは次のようになります。

-(IBAction) someAction {
    self second.secondViewControllerLabel.alpha = 0.2;
NSLog(@"someAction");
}
于 2013-02-01T12:55:29.143 に答える
1

あなたの話からすると、「埋め込みViewController」を親ViewControllerの子として設定する必要があるように思われます。

[mainViewController addChildViewController:childViewController];
[childViewController.view setFrame:self.view.bounds];
[self.childContainerView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];

これは非常に強力です。IBActionをからmainViewController子に転送できるからです...

[mainViewController childViewControllers]

それらの配列を返し、また見てください

– shouldAutomaticallyForwardRotationMethods
– shouldAutomaticallyForwardAppearanceMethods

そのため、お子様は親のローテーションについて自動的に通知されます。

あなたの質問に答えるために、あなたは次のようなことをすることができます:

// In Parent View Controller
- (IBAction) anAction:(id) sender
{
    for (CustomChildController *child in self.viewControllers) {
        [child handleSomeAction];
    }
}

詳細については、ドキュメントの内容を確認してください。

于 2013-02-01T12:26:27.703 に答える
0

secondViewControllerでは、secondViewControllerLabelがまだ作成されていないため、「objV1.secondViewControllerLabel.alpha」は効果がありません。理想的には、secondViewControllerにlabelAlphaというNSNumberプロパティを作成し、そのプロパティをfirstViewControllerに設定してから、2番目のコントローラーのviewDidLoadに次の行を追加する必要があります::

self.secondViewControllerLabel.alpha = self.labelAlpha;

これはあなたのために働くでしょう。

于 2013-02-01T12:16:52.467 に答える