Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将父视图中的按钮从其模式视图中隐藏?_Iphone_Objective C_Cocoa Touch_Uiviewcontroller_Uibutton - Fatal编程技术网

Iphone 将父视图中的按钮从其模式视图中隐藏?

Iphone 将父视图中的按钮从其模式视图中隐藏?,iphone,objective-c,cocoa-touch,uiviewcontroller,uibutton,Iphone,Objective C,Cocoa Touch,Uiviewcontroller,Uibutton,我有一个带有隐藏按钮的父视图,以及一个取消隐藏该按钮的方法。父视图有一个模态视图,我需要在其中调用隐藏按钮的方法 ParentViewController.m - (void)unhideButton { myButton.hidden = NO; NSLog(@"Unhide"); } - (void)levelComplete { ParentViewController *controller = [[ParentViewController] alloc] in

我有一个带有隐藏按钮的父视图,以及一个取消隐藏该按钮的方法。父视图有一个模态视图,我需要在其中调用隐藏按钮的方法

ParentViewController.m

- (void)unhideButton {
    myButton.hidden = NO;
    NSLog(@"Unhide");
}
- (void)levelComplete {
    ParentViewController *controller = [[ParentViewController] alloc] init];
    [controller unhideButton];
    [controller release];
}
ModalViewController.m

- (void)unhideButton {
    myButton.hidden = NO;
    NSLog(@"Unhide");
}
- (void)levelComplete {
    ParentViewController *controller = [[ParentViewController] alloc] init];
    [controller unhideButton];
    [controller release];
}

NSLog消息
Unhide
已成功显示在控制台中,但当我关闭模态视图控制器时,按钮仍然隐藏。我做错了什么?

为什么可能由ParentViewController实例提供的ModalViewController实例化了一个新的ParentViewController?我认为您需要做的是在创建时将对现有ParentViewController的引用传递给ModalViewController,然后在ModalViewController中,它可以在parents按钮上设置hidden属性


如果要遵循良好的设计实践,ParentViewController需要将其按钮的管理委托给ModalViewController。ParentViewController将遵循一个简单的协议,公开按钮,并在显示它之前将自己设置为ModalViewController的代理。

模态视图控制器自动引用使用
ParentViewController
属性显示的视图控制器。所以你可以直接说,

[self.parentViewController unhideButton];
levelComplete
方法中


但是,是的,创建一个新实例并对其调用该方法不会像Ryan所说的那样影响原始实例。

按钮隐藏在哪里?这可能会再次被调用。我已将其设置为隐藏在界面生成器中。请阅读,它将引导您了解委托的概念,如何在cocoa中使用它,以及如何在对象中实现它。委托是贯穿cocoa的两种主要模式之一。这是掌握mac和iphone编程的关键。确保你真正理解它。这就是你一直在寻找的答案。