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

时间:2013-06-11 09:24:38

标签: ios objective-c cocoa-touch uinavigationcontroller

这是UINavigationController子类中我的代码的一部分。 我创建了一个自定义UIButton,大部分时间都会显示。 如何在特定视图中隐藏它? 我希望能够setHidden一些ViewControllers中的按钮。 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];
}

在我要隐藏按钮的ViewDidLoad的{​​{1}}内添加:

ViewController

不起作用。

修改 也许是因为我正在创建它的新实例? 我在代码中没有引用这个子类。我唯一做的就是在选择SubClassUInav *test =[[SubClassUInav alloc]init]; [test.coolBtn setHidden:YES]; 时将其添加为IB内的自定义类。

3 个答案:

答案 0 :(得分: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

希望你现在明白了。

答案 1 :(得分:1)

你也可以使用像bellow

这样的NotificationCenter

从按钮定义类: -

在NSNotificationCenter中添加观察者
 [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(HideButton:)
                                                 name:@"HideButton"
                                               object:nil];

-(void)HideButton:(NSNotification *)notification {

    hide button code

}

使用Bellow代码调用此方法: -

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

答案 2 :(得分:0)

你做错了就是这一行

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

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