使用委托从 VC2 取消隐藏 VC1 中的按钮

Posted

技术标签:

【中文标题】使用委托从 VC2 取消隐藏 VC1 中的按钮【英文标题】:Unhide buttons in VC1 from VC2 using delegate 【发布时间】:2014-05-13 11:14:05 【问题描述】:

我正在尝试使用辅助 VC 中的按钮取消隐藏 ViewControl 中的一些按钮。

在我的研究中,我发现我必须使用“委托操作”。

我创建了两个名为 VC1 -> VC2 的类

VC1.h 包含:

#import <UIKit/UIKit.h>

@protocol CustomDelegate <NSObject>
-(void)hideUnhidebutton:(BOOL)value;
@end

@interface VC1 : NSObject <CustomDelegate>



@property (strong, nonatomic) IBOutlet UIButton *buttonToUnhide;

@end

在VC1.m中我实现了取消隐藏按钮的功能:

#import "VC1.h"

@interface VC1 ()

@end

@implementation VC1

-(void)hideUnhidebutton:(BOOL)value

    [self.buttonToUnhide setHidden:value];


在此之后,我在 VC2.h 中添加了添加委托变量作为属性

#import <UIKit/UIKit.h>
#import "VC1.h"


@interface VC2 : UIViewController

@property (nonatomic, strong) id<CustomDelegate> delegatePpty;

@end

最后我在 VC2.m 中调用了委托函数

#import "VC2.h"


@interface VC2 ()

@end

@implementation VC2


-(void)someAction

    [self.delegatePpty hideUnhidebutton:NO];//Call the delegate method to execute

没有问题,但是当我尝试启动项目时,它在加载显示此问题后就崩溃了:

这里是项目文件:

http://salvonostrato.com//ex/xcode5/TEST2.zip

我不知道下一步该怎么做... 请帮忙。

//已编辑

IT 一直在显示崩溃:

【问题讨论】:

先在VC2中编写协议.. 谢谢你的意思是先写@protocol CustomDelegate -(void)hideUnhidebutton:(BOOL)value;在 VC2 中? 是的。并考虑以下答案。使用 UIViewController 而不是 NSObject 您可能还想更改:[se​​lf.delegatePpty hideUnhidebutton:NO]; TO if ([self.delegatePpty respondsToSelector:@selector(hideUnhidebutton:)]); [self.delegatePpty hideUnhidebutton:NO]; 改了,我遇到了一个问题,说“if statement has empty body” 【参考方案1】:

您的 VC1 应该扩展 UIViewController。

@interface VC1 : UIViewController <CustomDelegate>

之后在界面构建器中再次建立连接。

【讨论】:

【参考方案2】:

您好,我查看了您的代码,我将更改一些内容。我会分享这个。请检查一下

Replace @interface VC1 : UIViewController <CustomDelegate> instead of @interface VC1 : NSObject <CustomDelegate>

并在故事板中添加一个导航控制器,如下图所示

现在它运行完美:)

【讨论】:

谢谢 .. 我尝试更改代码并添加 NC,但现在我无法进入 VC1 或添加按钮 我现在感觉很蠢,但是如果我运行这个项目,它会在我的 Xcode 5 中不断崩溃 @property (strong, nonatomic) IBOutlet UIButton *buttonToUnhide;这里是崩溃 你必须像@synthesize buttonToUnhide 那样在你的.m 文件中合成;并在情节提要中正确连接。我也在同一点面临崩溃。所以请检查你的连接 出于测试目的,我在您的故事板中添加了一个 UIViewController 类型类。你必须在你的故事板中添加一个导航控制器。使用导航控制器,您可以找到 UITableview 控制器。只需删除该 tableview 控制器并右键单击导航控制器并将 setRootViewcontroller 与 VC1 连接并运行。 :)

以上是关于使用委托从 VC2 取消隐藏 VC1 中的按钮的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 VC 并从以前的 VC 转移到新的 VC?

VC方法调用顺序

从 Swift 中的“UserDefaults”更新值的问题

导航视图控制器不显示后退按钮

根据表格中的单元格值隐藏按钮

从 1 个视图控制器转到另一个