隐藏另一个类的自定义按钮
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];
在我想隐藏按钮的ViewController
的ViewDidLoad
中添加这个:
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