sourcecode

UIBarButtonItem을 표시하거나 숨기려면 어떻게 해야 합니까?

copyscript 2023. 4. 9. 22:17
반응형

UIBarButtonItem을 표시하거나 숨기려면 어떻게 해야 합니까?

IB에 여러 개의 버튼이 있는 툴바를 만들었습니다.메인창의 데이터 상태에 따라 버튼 중 하나를 숨기거나 표시할 수 있도록 하고 싶습니다.

UIBarButtonItem숨겨진 속성은 없습니다.또한 지금까지의 숨겨진 예로는 네비게이션바 버튼을 0으로 설정하는 것을 들 수 있습니다.여기서는 버튼을 다시 표시하고 싶지 않습니다(IBOutlet에 버튼을 연결했을 경우는 말할 것도 없고, 버튼을 0으로 설정했을 경우, 어떻게 되돌릴 수 있을지 모르겠습니다).

버튼은 튼튼한 콘센트에 저장(이른바 '이른바'라고 부름)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];
}

콘센트에 저장되어 있기 때문에 툴바에 없는 경우에도 참조를 유지할 수 있습니다.

이 답변이 이 질문에 늦은 것을 알고 있습니다.하지만 비슷한 상황에 처한 사람이 있다면 도움이 될 것이다.

iOS 7에서는 바버튼 항목을 숨기려면 다음 두 가지 방법을 사용할 수 있습니다.

  • SetTitleTextAttributes " "바 버튼 적합합니다.- "Done", "Save"는 "Save"로 표시됩니다.그러나 추가, 휴지통 기호 등 텍스트가 아니기 때문에 기능하지 않습니다.
  • TintColor "Button" 이라는 "delete Button" 이 있습니다.

버튼을 숨기기 위해 다음 코드를 사용했습니다.-

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

버튼을 다시 표시하기 위해 다음 코드를 사용했습니다.-

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

간단한 접근방식은 다음과 같습니다.

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

방금 레티나 아이패드로 실행했는데 0.01이 안 보일 정도로 작아요.

너비를 변경하거나 바에서 제거하지 않고 버튼을 제자리에 숨길 수 있습니다.스타일을 보통으로 설정하고 제목을 제거한 후 단추를 사용 불가능으로 설정하면 사라집니다.복원하려면 변경 사항을 되돌리면 됩니다.

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

네비게이션 바를 찾았는데, 아래가 저의 해결책입니다.

navBar.topItem.rightBarButtonItem = nil;

여기서 "navBar"는 XIB 뷰에서 내비게이션 바에 대한 IBOutlet입니다. 여기서는 버튼을 숨기거나 특정 조건에 따라 표시하고 싶었습니다.따라서 "If"에서 조건을 테스트하고 있으며 true일 경우 타깃 뷰의 viewDidLoad 메서드에서 버튼을 0으로 설정합니다.

이것은 당신의 문제와 정확히 관련이 없을 수 있지만, 당신이 네비게이션 바의 버튼을 숨기려는 경우 같은 경우입니다.

3및를 통해 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

현재 iOS 7.1을 대상으로 OS X Yosemite Developer Preview 7 및 Xcode 6 베타 6을 실행하고 있으며, 다음 솔루션으로 충분합니다.

  • UINavigationItem ★★★★★★★★★★★★★★★★★」UIBarButtonItems
  • 제거할 다음 코드 실행

    [self.navItem setRightBarButtonItem:nil];
    [self.navItem setLeftBarButtonItem:nil];
    
  • 다음 코드를 실행하여 버튼을 다시 추가합니다.

    [self.navItem setRightBarButtonItem:deleteItem];
    [self.navItem setLeftBarButtonItem:addItem];
    

프로젝트에 IBOutlets를 사용했습니다.그래서 제 해결책은 다음과 같습니다.

@IBOutlet weak var addBarButton: UIBarButtonItem!

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

그리고 이 막대를 다시 표시해야 할 때는 거꾸로 속성을 설정하십시오.

대신 Swift 3에서는enableisEnable★★★★★★★★★★★★★★★★★★.

self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];

iOS 8. UIBarButtonItem.여러 가지 방법을 시도했지만 대부분은 도움이 되지 않았다. Max의 솔루션,setTintColor해 낸 누군가 가 있을 것 .이건 내가 직접 생각해봤는데, 누군가 도움이 될 것 같았어.

숨김:

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

표시용:

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

주름을 발견했다tintColor ★★★★★★★★★★★★★★★★★」isEnabledMax 및 기타에 의해 제안된 접근법 - VoiceOver가 접근성에 대해 활성화되어 있고 버튼이 논리적으로 숨겨져 있는 경우 접근성 커서는 여전히 막대 버튼에 초점을 맞추고 "흐림" 상태임을 나타냅니다(즉, "흐림" 상태).isEnabled거짓으로 말하다, 한 또 다른 은 '부작용을 하다'를이었습니다.isAccessibilityElement"false"는 false입니다.

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

후, 「 」를 설정합니다.isAccessibilityElement참말이다

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

오른쪽 바버튼 아이템의 왼쪽 대부분을 숨김/표시하고 있었기 때문에 바버튼 아이템이 공간을 차지하는 것은 제 경우 문제가 되지 않았습니다.

Swift를 사용해보세요.업데이트하지 마세요.tintColorAppDelegate(UIBarButtonItem) UIBarButtonItem(영어).

텍스트 버튼의 경우 제목을 변경하면 버튼이 '소실'될 수 있습니다.

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

여기 이 문제를 처리할 확장 기능이 있습니다.

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
@IBDesignable class AttributedBarButtonItem: UIBarButtonItem {

    var isHidden: Bool = false {

        didSet {

            isEnabled = !isHidden
            tintColor = isHidden ? UIColor.clear : UIColor.black
        }
    }
}

, 그럼 이제 바꾸세요.isHidden★★★★★★★★★★★★★★★★★★.

@lnafziger 답변에서 개선

바버튼을 강력한 콘센트에 저장하고 이를 숨기거나 표시하십시오.

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

Set Just Set ( Set(Just Set)barButton.customView = UIView()을 참조해 주세요.

UIBarButtonItem을 "숨길" 방법은 없습니다.다시 표시할 때 슈퍼뷰에서 삭제했다가 다시 추가해야 합니다.

이것은 답변 리스트에서 한참 뒤떨어져 있지만, 만약 누군가가 신속한 해결을 위해 쉬운 복사와 붙여넣기를 원할 경우를 대비해서, 여기 있습니다.

func hideToolbarItem(button: UIBarButtonItem, withToolbar toolbar: UIToolbar) {
    var toolbarButtons: [UIBarButtonItem] = toolbar.items!
    toolbarButtons.removeAtIndex(toolbarButtons.indexOf(button)!)
    toolbar.setItems(toolbarButtons, animated: true)
}

func showToolbarItem(button: UIBarButtonItem, inToolbar toolbar: UIToolbar, atIndex index: Int) {
    var toolbarButtons: [UIBarButtonItem] = toolbar.items!
    if !toolbarButtons.contains(button) {
        toolbarButtons.insert(button, atIndex: index)
        toolbar.setItems(toolbarButtons, animated:true);
    }
}

이를 위한 한 가지 방법은initWithCustomView:(UIView *)할당 시 속성UIBarButtonItem. 서브클래스:UIView숨김/숨김 속성을 가집니다.

예를 들어 다음과 같습니다.

1. 한 잔 하세요.UIButton숨기고 싶은/숨기고 싶은/숨기고 싶은/숨기고 싶은/숨기고 싶은.

2. 만듭니다.UIButton커스텀 뷰로 합니다.예를 들어 다음과 같습니다.

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

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

3. 숨김/숨김을 해제할 수 있습니다.myButton네가 만든 거야. [myButton setHidden:YES];

Swift 버전의 경우 코드는 다음과 같습니다.

위해서UINavigationBar:

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

막대 단추 항목이 비활성화되어 있을 때 텍스트 색상을 깨끗한 색으로 설정하는 것이 더 깔끔한 옵션일 수 있습니다.댓글로 설명해야 할 이상한 점은 없어요.또한 버튼을 파괴하지 않기 때문에 관련된 스토리보드 세그먼트를 보관합니다.

[self.navigationItem.rightBarButtonItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]}
                                                      forState:UIControlStateDisabled];

바 버튼 항목을 숨기려면 다음 작업을 수행합니다.

self.navigationItem.rightBarButton.enabled = NO;

숨겨진 재산이 없다는 것은 어설프지만 이것은 같은 결과를 제공한다.

UIBarButtonItem(UIBarButtonItem)에 텍스트 대신 이미지가 있는 경우 이를 숨기려면 다음을 수행합니다.navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;

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

이렇게 하면 쉽게 화면을 볼 수 있고 숨길 수 있습니다.

let view: UIView = barButtonItem.valueForKey("view") as! UIView
view.hidden = true

Swift 3을 사용하는 경우

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

마지막으로 iOS 16+부터UIBarButtonItem가지고 있다isHidden소유물.

기존 답변을 확대하면 다음과 같습니다.

extension UIBarButtonItem {
    func show() {
        if #available(iOS 16.0, *) {
            isHidden = false
        } else {
            isEnabled = true
            tintColor = .white
        }
    }
    
    func hide() {
        if #available(iOS 16.0, *) {
            isHidden = true
        } else {
            isEnabled = false
            tintColor = .clear
        }
    }
}

Eli Burke의 답변을 보완하고, 만약 당신이UIBarButtonItem에는 제목 대신 배경 이미지가 있습니다.다음 코드를 사용할 수 있습니다.

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

텍스트 속성을 사용하여 막대 단추를 숨길 수 있습니다.

barButton.enabled = false
barButton.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: .Normal)

UIBarButtonItem 확장에 의한 솔루션도 참조해 주십시오.Swift IOS를 사용하여 UIBarButtonItem disapea make a UIBarButtonItem dispear 。

toolbar.items 배열을 조작해야 합니다.

다음은 Done 버튼을 숨기고 표시하는 데 사용하는 코드입니다.단추가 툴바의 가장자리에 있거나 다른 단추 사이에 있는 경우 다른 단추가 이동하므로 단추가 사라지도록 하려면 단추를 가운데를 향해 마지막 단추로 배치합니다.나는 효과를 위해 버튼 동작을 애니메이션으로 만들어, 꽤 마음에 든다.

-(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;

IB에서 버튼의 제목을 공백으로 두면 버튼이 표시되지 않습니다(초기화되지 않았습니까?).UI 업데이트 중에 바 버튼 항목을 삭제하거나 콘센트 참조를 모두 삭제하지 않고 빌드에 대해 임시로 삭제하려는 경우 이 작업을 자주 수행합니다.

실행 시 버튼의 제목을 0으로 설정해도 버튼 전체가 사라지지 않습니다.미안하다고 대답할 수는 없지만, 어떤 사람들에게는 도움이 될 수도 있어요.

편집: 이 트릭은 단추의 스타일이 일반으로 설정된 경우에만 작동합니다.

언급URL : https://stackoverflow.com/questions/10021748/how-do-i-show-hide-a-uibarbuttonitem

반응형