0

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];
}

ボタンを非表示にしたい場所の中ViewDidLoadにこれを追加します:ViewController

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

うまくいきません。

編集: それは、新しいインスタンスを作成しているためでしょうか? コードでこのサブクラスを参照していません。UINavigationController私がした唯一のことは、が選択されたときに IB 内にカスタム クラスとして追加することでした。

4

3 に答える 3

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

今、あなたがはっきりと見えることを願っています。

于 2013-06-11T09:47:36.153 に答える
1

次のように 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];
于 2013-06-11T09:52:00.463 に答える
0

あなたが間違っているのはこの行です

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

これにより新しいインスタンスが作成され、そのインスタンスでボタンの状態が非表示になります。クラスのどこかで、サブビューとして追加されるのと同じことを行います。そのインスタンスを使用して非表示にします

于 2013-06-11T09:48:09.987 に答える