2009-08-04 43 views
14

の左側にInterface Builderを使用してコードを追加しました。これは、テーブルビューの編集モードでのみ表示します。しかし、leftBarButtonItem(例:self.navigationItem.leftBarButtonItem.hidden = YES)を設定するための隠されたプロパティは見つかりませんでした。UINavigationItemのバーボタンを非表示にする

私はenabledプロパティのみを設定できます。誰でもどのように非表示を制御し、leftBarButtonItemのプロパティを表示するか知っている、助けてください。

答えて

7

私は「隠す」唯一の方法はそれを除外することだと確信しています。

self.navigationItem.leftBarButtonItem = nil; 

それは基本的にそれを隠すのではなく、あなたのボタンを取り除きますので、それは、あなたの質問に完璧な答えではないのですけれども。再作成するか元のボタンを残しておき、leftBarButtonItemをUIBarButtonItemに戻すだけです。

+0

ご返信ありがとうございます。もし私が実際に隠れることができなければ、私はそのようなアプローチを考えていました。 – Sreehari

2

バーアイテムに隠し属性があることを示すために、ドキュメントには何もありません。ユーザーが編集していないときに

なぜ、その後、

self.navigationItem.leftBarButtonItem = nil; 

を設定し、ユーザーが編集しているとき

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

設定されていますか?これを行うには、毎回ボタンを再作成するか、ビューのライフサイクルの間、そのボタンを保存する必要があります。どちらもひどく痛いですが、いいえ、隠された財産ほど簡単ではありません。

+0

ニールはそれに私を打ち負かす。 –

55

これは、私はそれを隠すために他の方法がないとしてあなたが

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

を使用することができ、自分

self.navigationItem.leftBarButtonItem = nil; 
self.navigationItem.hidesBackButton = YES;  
+3

場合によってはそれをnilに設定しても機能しませんでしたが、hidesBackButtonをYESに設定すると効果がありました!ありがとう。 –

+1

nilに設定すると、navigationItemがデフォルトの動作に従うようになります。これは、ナビゲーションコントローラのサブビューにある場合に戻るボタンを表示するため、何も表示したくない場合は、hidesBackButtonをtrueに設定する必要がありますいつも – Nycen

+1

これは 'viewDidLoad'時に動作しませんが、' viewWillAppear: '時には動作します。 – ThomasW

1

それを試してみました動作します。ただそれを無効にしてください。

3

私は以下の私自身の "非表示" 機能のショーを作成しました:

- (void)hideClearButton:(BOOL)hide { 

    if (hide) { 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
    else { 
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
               initWithTitle:NSLocalizedString(@"Clear", @"Recents") 
               style:UIBarButtonItemStylePlain 
               target:self action:@selector(clearAll:)]; 

    } 
} 

をあなただけのようにそれを呼び出すことができます。

[self hideClearButton:YES]; //hide it 

または

[self hideClearButton:NO]; //show it 
1

を無効/

を非表示にするには
[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 

するには、SHOW /有効

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 
+0

しかし、真と偽は魅力のようにも機能します! – pkc456

+1

彼らは十分に公正です。 objective-C構文を守ることは読みやすくするために役立ちます。この場合、私は推測とは無関係です。 – Tander

4

あなたは

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

// Show 
self.navigationItem.leftBarButtonItem = self.myBarButtonItem 

を使用することができます鍵は必ずleftBarButtonItemをnilling前にボタン項目に強い参照を持っていることを行っています。私は再びそれを示したかったとのdidntは、再度ボタンを作成したいので、まあそれはnil作る

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem; 
0

はオプションではありませんでした。

ので、私がやったことは、私にとって

UIBarButtonItem *barButton = (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem; 
barButton.customView.hidden = true;//Hide 
barButton.customView.hidden = false;//Show 

作品でした。 (私のleftBarButtonItemはcustomViewを使用して作成されました)

希望します。

0

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)]; 
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView]; 
self.navigationItem.leftBarButtonItem = btnL; 
0

ため、このソリューションの仕事は、私はこれを作るための簡単な機能を持っています。 私はこのようなナビゲーションを持っています。 Navigation Bar フォームビルダには、背景画像があります。

@IBOutlet weak var memberBtn: UIBarButtonItem! 

あなたはそれがで表示/非表示にすることができます:それは簡単ですが、それは私のために働く

func hideMemberBtn() { 
    memberBtn.isEnabled = false 
    memberBtn.tintColor = UIColor.clear 
} 
func showMemberBtn() { 
    memberBtn.isEnabled = true 
    memberBtn.tintColor = UIColor.white 
} 

。必要に応じてtintColorを変更することができます。 ヘルプのご希望:]

関連する問題