1

我在 MainViewController 中有一个 UIButton。
MainViewController 有一个 childViewContoller。

我需要从 childViewController 访问 MainViewController 中的 UIButton (tcButton) 属性,并在 viewDidLoad 中将其设置为 setSelected:YES。我的 ChildViewController.m 文件中有以下代码,但它不起作用。

#import "ChildViewController.h"
#import "MainViewController.h"
#import "CoreData.h"

@interface ChildViewContoller () 
@property (nonatomic, strong) CoreData *coreData;
@property (nonatomic, strong) MainViewController *mainViewController;
@end

@implementation ChildViewController
@synthesize coreData, mainViewController;

-(void)viewDidLoad 
{
    [super viewDidLoad];
    self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication]  delegate] managedObjectContext];
    [[(mainViewController *)self.parentViewController tcButton] setSelected:YES];
}
4

2 回答 2

2

你的代码有点乱。为什么要在 viewDidLoad 中创建自己的新实例?这是没有意义的。如果 ChildViewController 是真正的子视图控制器,那么您可以通过 self.parentViewController 访问父视图。viewDidLoad 中只需要一行:

-(void)viewDidLoad // Line 4
{

    [[(MainViewController *)self.parentViewController tcButton] setSelected:YES]; // Line 8
}
于 2013-02-10T22:18:07.413 回答
1

您的代码中有几个问题,但执行您想要的主要想法是获取指向 mainViewController 的指针。有很多方法可以做到这一点,但这里有一个简单的例子,你可以如何实现这样的事情。例如,在 ChildViewContoller 的初始化程序中,您可以将指针传递给 mainViewController:

@interface ChildViewContoller ()

@property (nonatomic, strong) MainViewController *mainViewController;

@end

@implementation ChildViewContoller

- (id)initWithMainViewController:(MainViewController *)mainViewController
{
    self = [super init];

    if (self)
    {
        _mainViewController = mainViewController;
    }

    return self;
}

- (void)viewDidLoad
{
    [_mainViewController.tcButton setSelected:YES];
}

@end

请不要说我没有测试上面的代码,但你可以明白。

于 2013-02-10T21:13:28.620 回答