0

我将如何更改另一个视图控制器中的 UILabel 属性?

我已#import "SecondViewController.h"导入 FirstViewController.m 文件,然后

我在 FirstViewController 的方法中有以下内容

-(IBAction) someAction {

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

    objV1.secondViewControllerLabel.alpha = 0.2;

NSLog(@"someAction");

}

当调用 someAction 时,SecondViewController 中的 UILabel 没有任何反应。

此外,在这个例子中,第一个和第二个视图控制器都在另一个名为 MainViewController 的视图控制器中。因此,它们同时出现在屏幕上。

谢谢你的帮助。

4

3 回答 3

1

从您告诉我们的情况来看,您似乎需要将“嵌入式视图控制器”设置为父视图控制器的子级。

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

这非常强大,因为您可以将 IBActions 从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 回答
1

@Goles 答案将起作用,但如果您特别想从 FirstViewController.m 触发更改,则需要以某种方式传入对 SecondViewController 的引用。

因此,您可以使用自定义初始化来执行此操作,该初始化将引用您的第二个视图控制器作为参数,或者在您的 FirstViewController 上创建一个可以从外部设置的属性,如下所示:

第一控制器.h:

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

第一控制器.m:

@implementation
@synthesize second 

在您的父 ViewController 中,您将创建两个子视图控制器,然后:

ViewController1.second = ViewController2;

然后您的操作方法将变为:

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

由于在 secondViewController 中,还没有创建 secondViewControllerLabel,所以 'objV1.secondViewControllerLabel.alpha' 将不起作用。理想情况下,您应该在 secondViewController 中创建一个名为 labelAlpha 的 NSNumber 属性,在 firstViewController 中设置该属性,然后在第二个控制器的 viewDidLoad 中添加此行 ::

self.secondViewControllerLabel.alpha = self.labelAlpha;

这对你有用。

于 2013-02-01T12:16:52.467 回答