iOS Access parentViewController更改UIButton设置的状态选择:是

iOS Access parentViewController更改UIButton设置的状态选择:是,ios,uibutton,parentviewcontroller,childviewcontroller,Ios,Uibutton,Parentviewcontroller,Childviewcontroller,我在MainViewController中有一个UI按钮。 MainViewController有一个ChildViewController 我需要从childViewController访问MainViewController中的UIButton(tcButton)属性,并在viewDidLoad中将其设置为setSelected:YES。我的ChildViewController.m文件中有以下代码,但它不起作用 #import "ChildViewController.h" #import

我在MainViewController中有一个UI按钮。
MainViewController有一个ChildViewController

我需要从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];
}

代码中有几个问题,但执行所需操作的主要思想是获取指向mainViewController的指针。有很多方法可以做到这一点,但这里有一个简单的例子,你可以如何实现这样的事情。例如,在ChildViewController的初始值设定项中,可以传递指向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

请注意,我没有测试上面的代码,但您可以理解。

您的代码有点乱。为什么要在viewDidLoad中创建自己的新实例?这毫无意义。如果ChildViewController确实是子视图控制器,则可以使用self.parentViewController访问父视图。在viewDidLoad中只需要一行:

-(void)viewDidLoad // Line 4
{

    [[(MainViewController *)self.parentViewController tcButton] setSelected:YES]; // Line 8
}

代码中有4个错误:(1)self=[super init]//无法在init族(2)中的方法之外分配给“self”\u mainViewController=mainViewController//意外的接口名称“MainViewController”预期表达式(3)返回self//Void方法initWithMainViewController不应返回值(4)//在ARC中不允许对指向“Void”的objective-C指针进行隐式转换。很抱歉,正如我所说,我无法测试代码,请不要按原样使用它。相反,试着理解代码在做什么。我修改了一些代码以避免一些错误,请不要认为这是ARC版本。rdelmar:我也这么想,首先尝试:[self.parentViewController tcButton]setSelected=YES];这给了我一个错误:没有可见的@interface'UIViewController'声明选择器'tcButton',然后我开始用谷歌搜索并看到上面的代码。但是,现在我正在尝试您的代码,并得到以下错误:解析问题预期表达式。光标箭头指向(MainViewController*)的右括号。是的,我在结尾有一个分号,我复制并粘贴了你的代码。谢谢。@user1107173,哦,对不起,我打错了,应该在结尾处选择:是(不是=),谢谢你的快速回复。我把它改为:是];我仍然得到了与预期表达式相同的解析问题。光标箭头指向(MainViewController*)。@user1107173的右括号,这绝对有效——编辑您的问题以显示该类中的内容。是否已导入MainViewController.h?@user1107173,它应该是MainViewController(大写M)——您指的是类,而不是属性。如果愿意,可以将属性分配给(MainViewController*)self.parentViewController。