ios - 透明 - uibarbuttonitem 非表示 swift




UIBarButtonItemの表示/非表示を切り替えるにはどうすればよいですか? (20)

いくつかのボタンを使ってIBでツールバーを作成しました。 私は、メインウィンドウのデータの状態に応じて、ボタンの1つを非表示/表示できるようにしたいと考えています。

UIBarButtonItemは隠しプロパティがありません。これまで隠れていた例は、nav barのボタンをnilに設定していますが、ボタンをもう一度表示する必要があるため、ここでやりたいとは思いません私のボタンをIBOutletに接続すると、それをnilに設定すると、どうやって元に戻すのか分かりません)。


@lnafziger、@MindSpiker、@vishal、などへのクレジットが付いています。 アル、

1つの右(または左)のバーボタンのために私が到着した最も単純な1つのライナーは次のとおりです:

self.navigationItem.rightBarButtonItem = <#StateExpression#>
    ? <#StrongPropertyButton#> : nil;

次のように:

@interface MyClass()

@property (strong, nonatomic) IBOutlet UIBarButtonItem *<#StrongPropertyButton#>;

@end

@implementation

- (void) updateState
{
    self.navigationItem.rightBarButtonItem = <#StateExpression#>
        ? <#StrongPropertyButton#> : nil;
}

@end

私はこれをテストし、それは私のために働く(強力なバーボタンの項目はIB経由で配線されている)。


@lnafzigerからの改善

あなたのBarbuttonを強力なアウトレットに保存し、これを隠す/表示する:

-(void) hideBarButtonItem :(UIBarButtonItem *)myButton {
    // Get the reference to the current toolbar buttons
    NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];

    // This is how you remove the button from the toolbar and animate it
    [navBarBtns removeObject:myButton];
    [self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
}


-(void) showBarButtonItem :(UIBarButtonItem *)myButton {
    // Get the reference to the current toolbar buttons
    NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];

    // This is how you add the button to the toolbar and animate it
    if (![navBarBtns containsObject:myButton]) {
        [navBarBtns addObject:myButton];
        [self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
    }
}

いつでも機能の下で使用する必要があります。

[self showBarButtonItem:self.rightBarBtn1];
[self hideBarButtonItem:self.rightBarBtn1];

Swift 3とSwift 4ではUIBarButtomItemを非表示にすることができます:

self.deleteButton.isEnabled = false
self.deleteButton.tintColor = UIColor.clear

UIBarButtonItemを表示するには:

self.deleteButton.isEnabled = true
self.deleteButton.tintColor = UIColor.blue

tintColorでは、 UIBarButtomItem使用する原点の色を指定する必要があります


Swift版では、次のコードがあります。

UINavigationBar

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

UIBarButtonItemを「隠す」方法はありません。あなたはスーパービューからそれを削除し、再度表示したいときにそれを追加する必要があります。


UliBarButtonItemにタイトルの代わりに背景イメージがある場合、Eli Burkeの応答を補完するために、コードを使用することができます:

-(void)toggleLogoutButton:(bool)show{
    if (show) {
        self.tabButton.style = UIBarButtonItemStyleBordered;
        self.tabButton.enabled = true;
        UIImage* imageMap = [UIImage imageNamed:@"btn_img.png"];
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:imageMap forState:UIControlStateNormal];
    } else {
        self.tabButton.style = UIBarButtonItemStylePlain;
        self.tabButton.enabled = false;
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:nil forState:UIControlStateNormal];
    }
}

iOS 8. UIBarButtonカスタム画像付きアイテム。 多くの異なる方法を試してみましたが、そのほとんどは助けていませんでした。 Maxの解決策では、 setTintColorはどの色にも変更されていませんでした。 私は自分自身でこれを考え出し、それがある人には役に立つと思った。

隠れるために:

[self.navigationItem.rightBarButtonItem setEnabled:NO];
[self.navigationItem.rightBarButtonItem setImage:nil];

表示する

[self.navigationItem.rightBarButtonItem setEnabled:YES];
[self.navigationItem.rightBarButtonItem setImage:image];

toolbar.items配列を操作する必要があります。

ここでは、[完了]ボタンを非表示にして表示するためのコードをいくつか示します。 あなたのボタンがツールバーの端にある場合、または他のボタンの中間にある場合は、他のボタンが移動するので、ボタンを消したい場合は、ボタンを中央に向かって最後のボタンとして配置します。 私は効果のためにボタンの動きをアニメーション、私はそれが非常に好きです。

-(void)initLibraryToolbar {

    libraryToolbarDocumentManagementEnabled = [NSMutableArray   arrayWithCapacity:self.libraryToolbar.items.count];
    libraryToolbarDocumentManagementDisabled = [NSMutableArray arrayWithCapacity:self.libraryToolbar.items.count];
    [libraryToolbarDocumentManagementEnabled addObjectsFromArray:self.libraryToolbar.items];
    [libraryToolbarDocumentManagementDisabled addObjectsFromArray:self.libraryToolbar.items];
    trashCan = [libraryToolbarDocumentManagementDisabled objectAtIndex:3];
    mail = [libraryToolbarDocumentManagementDisabled objectAtIndex:5];
    [libraryToolbarDocumentManagementDisabled removeObjectAtIndex:1];
    trashCan.enabled = NO;
    mail.enabled = NO;
    [self.libraryToolbar setItems:libraryToolbarDocumentManagementDisabled animated:NO];

}

今すぐ次のコードを使用してボタンを表示できます

[self.libraryToolbar setItems:libraryToolbarDocumentManagementEnabled animated:YES];
trashCan.enabled = YES;
mail.enabled = YES; 

ボタンを非表示にする

[self.libraryToolbar setItems:libraryToolbarDocumentManagementDisabled animated:YES];
trashCan.enabled = NO;
mail.enabled = NO;

Swift 3を使用している場合

if (ShowCondition){
   self.navigationItem.rightBarButtonItem = self.addAsset_btn 
 } 
else {
   self.navigationItem.rightBarButtonItem = nil
 }

あなたがAppDelegateのフォントサイズのようなあなたのUIBarButtonItemのデザインを持っている場合は、 Swiftを試してみてくださいtintColor更新しないでください。表示されると、ボタンの外観が完全に変更されます。

テキストボタンの場合、タイトルを変更するとボタンが消えることがあります。

if WANT_TO_SHOW {
    myBarButtonItem.enabled = true
    myBarButtonItem.title = "BUTTON_NAME"
}else{
    myBarButtonItem.enabled = false
    myBarButtonItem.title = ""
}

いくつかのヘルパーメソッド私は複数のツールバーと複数のボタンがあるので、lnafzigerの答えに基づいて共有すると思いました。

-(void) hideToolbarItem:(UIBarButtonItem*) button inToolbar:(UIToolbar*) toolbar{
    NSMutableArray *toolbarButtons = [toolbar.items mutableCopy];
    [toolbarButtons removeObject:button];
    [toolbar setItems:toolbarButtons animated:NO];
}

-(void) showToolbarItem:(UIBarButtonItem*) button inToolbar:(UIToolbar*) toolbar atIndex:(int) index{
    NSMutableArray *toolbarButtons = [toolbar.items mutableCopy];
    if (![toolbarButtons containsObject:button]){
        [toolbarButtons insertObject:button atIndex:index];
        [self setToolbarItems:toolbarButtons animated:YES];
    }
}

ここにこれを扱う拡張機能があります。

extension UIBarButtonItem {

    var isHidden: Bool {
        get {
            return tintColor == .clear
        }
        set {
            tintColor = newValue ? .clear : .white //or whatever color you want
            isEnabled = !newValue
            isAccessibilityElement = !newValue
        }
    }

}

使用法:

myBarButtonItem.isHidden = true

これを行う1つの方法は、 initWithCustomView:(UIView *)割り当てるときのinitWithCustomView:(UIView *)プロパティを使用することです。 UIViewサブクラスにはhide / unhideプロパティがあります。

例えば:

1.非表示にするUIButtonを表示させます。

UIButtonをカスタムビューとして作成します。 次のように:

UIButton*myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];//your button

UIBarButtonItem*yourBarButton=[[UIBarButtonItem alloc] initWithCustomView:myButton];

3.作成したmyButton表示/非表示をmyButtonことができます。 [myButton setHidden:YES];


ちょうどbarButton.customView = UIView()を設定し、トリックを参照してください


ボタンの幅を変更したり、バーから削除することなく、ボタンを非表示にすることは可能です。 スタイルをプレーンに設定し、タイトルを削除してボタンを無効にすると、スタイルは消えます。 それを復元するには、変更を元に戻します。

-(void)toggleBarButton:(bool)show
{
    if (show) {
        btn.style = UIBarButtonItemStyleBordered;
        btn.enabled = true;
        btn.title = @"MyTitle";
    } else {
        btn.style = UIBarButtonItemStylePlain;
        btn.enabled = false;
        btn.title = nil;
    }
}

ボタンを強力なコンセント( myButtonと呼ぶ)に保存して、これを追加/削除します:

// Get the reference to the current toolbar buttons
NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy];

// This is how you remove the button from the toolbar and animate it
[toolbarButtons removeObject:self.myButton];
[self setToolbarItems:toolbarButtons animated:YES];

// This is how you add the button to the toolbar and animate it
if (![toolbarButtons containsObject:self.myButton]) {
    // The following line adds the object to the end of the array.  
    // If you want to add the button somewhere else, use the `insertObject:atIndex:` 
    // method instead of the `addObject` method.
    [toolbarButtons addObject:self.myButton];
    [self setToolbarItems:toolbarButtons animated:YES];
}

コンセントに格納されているため、ツールバーにない場合でも参照を保持します。


私はここに私がまだそれを見つけることができなかったので私の解決策をここに追加します。 私はそのイメージが1つのコントロールの状態に依存する動的なボタンを持っています。 私にとって最も簡単な解決策は、コントロールが存在しない場合、イメージをnilに設定することでした。 コントロールが更新されるたびに画像が更新され、これが私にとって最適なものでした。 ただ、私もenabledしてNO設定していることを確認してください。

幅を最小値に設定しても、iOS 7では動作しませんでした。


私はこの答えがこの質問の遅れであることを知っています。 しかし、他の誰かが同様の状況に直面した場合に役立つかもしれません。

iOS 7では、バーボタンアイテムを非表示にするために、次の2つの手法を使用できます。

  • SetTitleTextAttributes使用してSetTitleTextAttributes : - これは "完了"、 "保存"などのバーボタン項目にはSetTitleTextAttributesます。しかし、テキストではないので、Add、Trash記号など(少なくとも私にとってはそうではありません)
  • TintColor使用しTintColor : - "deleteButton"というバーボタンアイテムがある場合: -

ボタンを隠すために、私は次のコードを使用しました:

[self.deleteButton setEnabled:NO]; 
[self.deleteButton setTintColor: [UIColor clearColor]];

ボタンをもう一度表示するために、私は次のコードを使用しました:

[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];

私は自分のプロジェクトでIBOutletsを使用しました。 だから私の解決策は:

@IBOutlet weak var addBarButton: UIBarButtonItem!

addBarButton.enabled = false
addBarButton.tintColor = UIColor.clearColor()

このバーをもう一度表示する必要がある場合は、逆のプロパティを設定します。

Swift 3では代わりenable isEnableプロパティを使用isEnableます。


簡単な方法があります:

hide:  barbuttonItem.width = 0.01;
show:  barbuttonItem.width = 0; //(0 defaults to normal button width, which is the width of the text)

私はちょうど私の網膜iPadでそれを走らせました、そして.01はそれが現れないのに十分小さいです。





uitoolbar