隐藏另一个类的自定义按钮

Posted

技术标签:

【中文标题】隐藏另一个类的自定义按钮【英文标题】:Hiding a custom button from another class 【发布时间】:2013-06-11 09:24:38 【问题描述】:

这是我在UINavigationController 子类中的代码的一部分。 我创建了一个自定义的UIButton,大部分时间都会显示。 如何将其隐藏在特定视图中? 我希望能够setHidden 一些 ViewController 中的按钮。 UIButton 是一个属性。

-(void)viewDidLoad

    [super viewDidLoad];
    _coolBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [_coolBtn setFrame:CGRectMake(0, 0, 56, 39)];
    [_coolBtn setImage:[UIImage imageNamed:@"top.png"] forState:UIControlStateNormal];
    [_coolBtn addTarget:self action:@selector(doSomethingCool) forControlEvents:UIControlEventTouchUpInside];
    [self.navigationBar addSubview:_coolBtn];

在我想隐藏按钮的ViewControllerViewDidLoad 中添加这个:

SubClassUInav *test =[[SubClassUInav alloc]init];
[test.coolBtn setHidden:YES];

没用。

编辑: 也许是因为我正在创建它的一个新实例? 我没有在我的代码中引用这个子类。我唯一做的就是在选择UINavigationController 时将其作为自定义类添加到IB 中。

【问题讨论】:

如果这是您的自定义导航控制器类,则将属性分配给您的coolBtn。然后你可以在你可以调用的类之外​​访问这个属性,[myNavigationController.coolBtn setHidden:Yes]; // 需要 myNavigationController 引用。 那行不通。我已经编辑了我的问题。 但是您正在分配初始化一个新实例并隐藏该实例的按钮,而您应该要求已经存在的实例隐藏该按钮。 我再次编辑了我的问题。问题是我没有子类的现有实例(我知道)。我没有在我的代码中引用这个子类。我唯一做的就是在选择 UINavigationController 时将其作为自定义类添加到 IB 中。当然,我可以通过self.navigationController 之类的操作来访问它,但我不知道如何访问它的属性。 @Sha:检查我添加的答案。 【参考方案1】:

这是你必须做的。

SubClassUINav.h

@interface SubClassUInav : UINaviagationController 

@property (nonatomic, strong) UIButton *coolBtn;

SubClassUINav.m

@synthesize _coolBtn = coolBtn;

在您的 MyViewController.m 中:

#import "SubClassUINav.h"    

// get reference of your nav controller, do not create new instance by alloc-init
    SubClassUINav *subClassUINavInstance = (SubClassUINav *) self.navigationController
    [subClassUINavInstance.coolBtn setHidden: YES]; //Access your properties

希望您现在能清楚地看到。

【讨论】:

有效!一个小问题,如果你不介意的话。在我的子类中,我添加了_coolBtn.tag = 5; 并在viewController 中添加了UIButton *random = (UIButton *)[self.view viewWithTag:5]; random.alpha = 0;,但这也不起作用。知道为什么吗? 可能有其他视图具有相同的标签号。这就是为什么使用属性比标记更好。因为代码也变得可读,比如你实际上指的是哪个按钮,只需查看你的代码就更清楚了。而标签号不会指定。【参考方案2】:

你也可以像下面这样使用 NotificationCenter 来做到这一点

通过按钮定义类在 NSNotificationCenter 中添加观察者:-

 [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(HideButton:)
                                                 name:@"HideButton"
                                               object:nil];

-(void)HideButton:(NSNotification *)notification 

    hide button code


使用波纹管代码调用它:-

[[NSNotificationCenter defaultCenter] postNotificationName:@"HideButton" object:self];

【讨论】:

【参考方案3】:

你做错的是这一行

SubClassUInav *test =[[SubClassUInav alloc]init];

这将创建一个新实例,在该实例中按钮状态将被隐藏。在您的类中,您将执行与添加为子视图相同的操作。使用该实例并将其隐藏

【讨论】:

以上是关于隐藏另一个类的自定义按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在电子的自定义标题栏中显示/隐藏最大化/最小化按钮

连续按钮的自定义arrayadapter和onclicklistener

单选按钮的自定义布局

iOS 编程:viewDidAppear 中的自定义按钮

通过 PayPal Buy Now 按钮的自定义字段发送一个 json 编码的 var

Swift在按钮点击上添加自定义单元格