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


251

여러 버튼으로 IB에 툴바를 만들었습니다. 기본 창의 데이터 상태에 따라 버튼 중 하나를 숨기거나 표시하고 싶습니다.

UIBarButtonItem 숨겨진 속성이 없으며 지금까지 찾은 예제는 탐색 모음 버튼을 nil로 설정하는 것과 관련이 있습니다.이 버튼을 다시 표시해야하기 때문에 여기에서 수행하고 싶지는 않습니다. 내가 버튼을 IBOutlet에 연결하면이를 nil로 설정하면 어떻게 되돌릴 지 잘 모르겠습니다).


간단히 비활성화하고 버튼 기능을 사용할 수 없다는 접근성 레이블을 추가했습니다.
다니엘 스프링거

답변:


263

버튼을 강력한 콘센트 에 저장하고 (호출하자 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];
}

콘센트에 저장되어 있기 때문에 도구 모음에없는 경우에도 참조를 유지합니다.


73
내비게이션 컨트롤러의 오른쪽 버튼 에이 작업을 수행하기 위해 toolBarItems 및 setToolBarItems 대신 self.navigationItem.rightBarButtonItems 및 [self.navigationItem setRightBarButtonItems <prams>]를 사용했습니다.
MindSpiker

@MindSpiker : 예, 탐색 막대의 버튼에도 동일한 기술이 적용됩니다.
lnafziger

1
dealloc에서 myButton을 생략해야합니까?
Van Du Tran

48
또는 애플은 방금 .hidden 속성을 추가했을 수 있습니다. -_-
GeneCode

217

이 질문에 대한 답이 늦다는 것을 알고 있습니다. 그러나 다른 사람이 비슷한 상황에 처하면 도움이 될 수 있습니다.

iOS 7에서 막대 버튼 항목을 숨기려면 다음 두 가지 기술을 사용할 수 있습니다.

  • use SetTitleTextAttributes:- "완료", "저장"등과 같은 막대 버튼 항목에는 효과적입니다. 그러나 텍스트가 아니기 때문에 추가, 휴지통 기호 등과 같은 항목에는 작동하지 않습니다.
  • 사용 TintColor:- "deleteButton"이라는 막대 버튼 항목이있는 경우 :-

버튼을 숨기려면 다음 코드를 사용했습니다.

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

버튼을 다시 표시하려면 다음 코드를 사용했습니다.

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

[self.navigationItem.rightBarButtonItem setEnabled : NO]; [self.navigationItem.rightBarButtonItem setTintColor : [UIColor clearColor]];
Leon

3
Swift의 경우 : deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()비활성화 및 숨기기, deleteButton.enabled = true; deleteButton.tintColor = nil다시 활성화하여 정상적으로 표시합니다.
Unixmonkey

1
이 방법을 사용하면 해당 클래스 안에 UIBarButton을 표시할지 여부에 대한 논리를 넣을 수 있습니다. 하나의 버튼에서만 작동하는 이유는 즉시 명확하지 않습니다. 버튼을 이런 방식으로 숨기면 여전히 공간을 차지하므로 여러 개의 버튼이 있으면 빈 공간이 생길 수 있기 때문입니다.
SimplGy

당신의 첫 번째 접근법은 나에게 완벽했습니다. 나는 설정 UIColor.clear을 위해 UIControlState.disabled및 표시 할 수 있습니다 /를 사용하여 버튼을 숨 깁니다 setEnabled. 물론 언급했듯이 이것은 텍스트 버튼에만 작동합니다.
fl034

큰 이미지 (아마도 접근성을 위해)가 나타날 때까지 길게 누르면 isEnabled가 false로 설정되어 있어도 작동합니다.
Daniel Springer

67

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

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

방금 레티 나 iPad에서 실행했으며 .01은 표시되지 않을 정도로 작습니다.


13
모든 솔루션 중에서이 솔루션은 빠르고 더럽고 효과적이었습니다. 또한 barbuttItem.enabled = NO를 추가했습니다. 버튼을 충분히 누르면 여전히 발사 할 수 있기 때문에
Stickley

1
나를 위해 작동하지 않습니다. '+'이미지와 함께 추가 버튼을 사용했기 때문이라고 생각했지만 "신규"라는 텍스트로 사용자 지정 버튼을 사용해 보았지만 여전히 사라지지 않습니다. 인 에이블먼트가 변경되어 코드가 실행되고 있음을 알 수 있습니다. 어떤 아이디어? 이 버튼은 스토리 보드에서 만들어지고 segue가 있으므로 프로그래밍 버튼으로 바꾸고 싶지 않습니다.
Rhubarb

19
내비게이션 컨트롤러 툴바에서는 작동하지 않지만 다른 툴바에서는 작동합니다.
Drew Rosenberg

3
그것을 숨기지 만 여전히 탭에 응답합니다. 나를 위해 그것은 보이지 않는 버튼처럼 작동합니다.
Tibidabo

이 라인을 사용하여 글로벌 색조 색상을 설정 한 경우 self.window?.tintColor = APP_PRIMARY_COLORAppDelegate에의를, 다음이 작동하지 않습니다
Mehul Thakkar에게

60

너비를 변경하거나 막대에서 제거하지 않고 단추를 제자리에 숨길 수 있습니다. 스타일을 일반으로 설정하고 제목을 제거한 다음 버튼을 비활성화하면 사라집니다. 복원하려면 변경 사항을 되 돌리십시오.

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

2
이것은 단순히 btn.title = nil을 설정하여 나를 위해 일했습니다. 만약을 위해서도 enabled = NO로 설정하고 있습니다.
Pork '

3
buttonItem.title을 nil로 설정하면 iOS7에서 작동하지 않습니다. 다시 설정할 때 버튼이 다시 나타나지 않았습니다. 그러나 효과가 있었던 것은 buttonItem.title = @ "";
Mark Knopper

42

탐색 막대를 찾고 있었지만 아래 솔루션이 있습니다.

navBar.topItem.rightBarButtonItem = nil;

여기서 "navBar"는 XIB의보기에서 NavigationBar에 대한 IBOutlet입니다. 여기에서 단추를 숨기거나 특정 조건에 따라 표시하려고했습니다. 따라서 "If"의 조건을 테스트하고 true이면 대상보기의 viewDidLoad 메소드에서 버튼을 nil로 설정합니다.

NavigationBar에서 버튼을 숨기려면 문제와 정확히 관련이 없지만 비슷한 경우가 있습니다.


나중에 rightBarButtonItem다시 설정 하려면 탐색 모음 에서 단추를 분리 할 때 해제되지 않도록 단추 항목이 강력한 IBOutlet에 저장되어 있는지 확인하십시오 .
Nate

30

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


2
그러나 여전히이 버튼을위한 공간이 필요합니다.
Makalele

22

현재 iOS 7.1을 대상으로 OS X Yosemite Developer Preview 7 및 Xcode 6 베타 6을 실행 중이며 다음 솔루션이 적합합니다.

  • 대한 출구 만들기 UINavigationItemUIBarButtonItem
  • 다음 코드를 실행하여 제거하십시오.

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

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

고마워, 이것은 내가 찾은 최고의 방법입니다. 버튼에 대한 참조가 강력해야합니다.
jyoung

또한 버튼이 하나만있는 경우에만 작동합니다. 이 예에서는 해당 측면의 모든 버튼을 제거합니다.
lnafziger

@jyoung 이것은 나를 위해 일했지만 참조가 강한 경우 왜 중요합니까? 나는 다른 방법으로 시도하지 않았지만 일반적으로 기본값이 아니기 때문에 그렇게 설정하지 않습니다.
Robert

@Robert 나중에 개체를 사용하려면 개체를 nil로 설정했을 때 개체가 가비지 수집되지 않도록해야합니다. 막대 버튼 항목을 말했을 때 객체를 유지하고있는 것이 없으면 제거해도됩니다. 참조 횟수는 0이며 가비지 수집됩니다.
jyoung

14

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

@IBOutlet weak var addBarButton: UIBarButtonItem!

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

이 막대를 다시 표시해야 할 경우 반전 된 속성을 설정하십시오.

Swift 3 에서는 대신 속성 을 enable사용하십시오 isEnable.



12

iOS 8. UIBarButton 커스텀 이미지가있는 항목. 여러 가지 다른 방법을 시도했지만 대부분 도움이되지 않았습니다. 맥스의 솔루션 setTintColor은 어떤 색으로도 변하지 않았습니다. 나는 이것을 스스로 알아 냈고, 누군가에게 유용 할 것이라고 생각했다.

숨기려면 :

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

보여주기 위해 :

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

9

Swift 에서 시도하고 tintColorAppDelegate의 글꼴 크기와 같은 UIBarButtonItem 디자인 이 있으면 업데이트하지 마십시오 . 표시 될 때 버튼 모양이 완전히 변경됩니다.

텍스트 버튼의 경우 제목을 변경하면 버튼이 사라질 수 있습니다.

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

7

나는 다른 주름을 발견 tintColor하고 isEnabledMax와 다른 사람에 의해 제안 된 접근 방식 - VoiceOver를이 접근성 활성화되고 버튼이 때 논리적으로 접근 커서가 여전히 모음 단추에 초점을 맞출 것이다, 숨겨진, 그리고 상태는 ( "흐리게"되는 즉 때문에 isEnabledIS false로 설정). 수락 된 답변의 접근 방식은이 부작용으로 고통받지 않지만 isAccessibilityElement버튼을 "숨길 때"거짓 으로 설정 하는 또 다른 해결 방법은 다음과 같습니다.

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

그런 다음 isAccessibilityElement버튼을 "표시"할 때 다시 true 로 설정 하십시오.

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

오른쪽 막대 버튼 항목의 가장 왼쪽 부분을 숨기거나 표시했기 때문에 막대 버튼 항목이 여전히 공간을 차지하는 것은 문제가되지 않았습니다.


6
@IBDesignable class AttributedBarButtonItem: UIBarButtonItem {

    var isHidden: Bool = false {

        didSet {

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

이제 단순히 isHidden속성을 변경하십시오 .


5

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

5

그냥 설정 barButton.customView = UIView()하고 트릭을 참조하십시오


이 답변의 기능은 모든 유연한 크기 조정이 작동하도록하는 것입니다. 실제로 매우 효율적인 답변입니다. 아마도 확장과 결합되어 완벽 할 것입니다.
Adrian_H

4

UIBarButtonItem을 "숨길"방법은 없습니다. superView에서 UIBarButtonItem을 제거했다가 다시 표시하려면 다시 추가해야합니다.


이것은 실제로 사실이 아닙니다. Max가 설명한 방법이 효과적입니다.
북부 인

1
nothernman-Max가 실제로 올바르지 않습니다. 그는 대부분의 사람들이 "숨김"을 정의하는 방식으로 실제로 버튼을 숨기지 않습니다. 그는 단순히 그것을 보이지 않게하고 사용자 상호 작용을 비활성화합니다. 버튼은 여전히 ​​존재하며 공간을 차지합니다. 그것은 당신이 "숨기기"를 어떻게 정의하고 싶은가에 달려 있습니다. 나는 원래 질문의 정신이 그것을 단순히 보이지 않게 만드는 것이 아니라 실제로 그것을 제거 / 추가하기를 원한다고 믿습니다.
Michael Peterson

4

이것은 답변 목록 아래로 먼 길이지만 누군가가 신속한 솔루션을 쉽게 복사하여 붙여 넣기를 원할 경우를 대비하여 여기에 있습니다.

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

나쁘지는 않지만 UIBarButtonItem을 숨기도록 요청하기 때문에 UIToolbar가 아닌 UINavigationItem을 매개 변수로 제공해야합니다. 함수를 다음과 같이 수정했습니다. func hideToolbarItem (button : UIBarButtonItem, withToolbar toolbar : UINavigationItem) {var toolbarButtons : [UIBarButtonItem] = toolbar.rightBarButtonItems! toolbarButtons.removeAtIndex (toolbarButtons.indexOf (button)!) toolbar.setRightBarButtonItems (toolbarButtons, animated : true)} 그리고 잘 작동합니다
Kingalione

3

이를 수행하는 한 가지 방법 initWithCustomView:(UIView *)은을 할당 할 때 의 속성을 사용하는 것입니다 UIBarButtonItem. 의 서브 클래스 UIView는 hide / unhide 속성을 갖습니다.

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

1. 가지고 UIButton당신이 숨기기 / 숨기기 취소를 할를.

2.를UIButton 사용자 정의보기로 만듭니다 . 처럼 :

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

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

3. 생성 한 것을 숨기거나 숨길 수 있습니다 myButton.[myButton setHidden:YES];


그러나 다른 버튼들 사이의 간격을 닫지 않습니다. "숨겨진"경우 툴바에 빈 영역이 있습니다.
lnafziger

@lnafziger 그렇습니다. 그러나 버튼 사이의 간격을 좁히는 것에 대한 OP 언급을 읽지 않았지만 주목할만한 포인트입니다.
iNoob April

1
감사합니다, 귀하의 답변도 유용하지만 툴바에서 버튼을 숨기려고 할 때 대부분의 사람들은 버튼이 전혀없는 것처럼 보이기를 원한다고 생각합니다 (공백 영역 없음). 왼쪽 또는 오른쪽이면 실제로 중요하지 않습니다.
lnafziger

좋은 점, iNoob 및 Inafziger-나는 그것을 언급하지 않았지만 예, 빈 자리가없는 것을 선호합니다.
사샤

3

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

의 경우 UINavigationBar:

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

2

막대 버튼 항목이 비활성화 된 경우 텍스트 색상을 선명한 색상으로 설정하는 것이 더 깔끔한 옵션 일 수 있습니다. 코멘트에서 설명해야 할 이상한 점은 없습니다. 또한 버튼을 파괴하지 않으므로 관련된 스토리 보드 세그를 계속 유지합니다.

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

그런 다음 막대 버튼 항목을 숨기고 싶을 때 다음을 수행하면됩니다.

self.navigationItem.rightBarButton.enabled = NO;

숨겨진 속성이 없다는 것은 아쉬운 일이지만 동일한 결과를 제공합니다.


1
rightBarButtonItem 안에 버튼이 있습니다. 그래서 enabled를 NO로 설정하고 disable on state 이미지를 nil로 변경했습니다. 매력처럼 일했습니다 ... 감사합니다
Skywalker

훌륭한 아이디어이지만 이미지를 null로 설정해도 효과가 없었습니다. 이미지로 20x20의 약간 투명한 사각형을 배치해야했습니다.
Lena Bru

2

UIBarButtonItem에 텍스트 대신 이미지가있는 경우이를 숨기려면 다음과 같이하십시오. navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;


2

각 도구 모음과 단추가 여러 개 있으므로 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];
    }
}

2

이 방법으로 쉽게 뷰를 가져 와서 숨길 수 있습니다

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

2

Swift 3을 사용하는 경우

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

2

여기에 이것을 처리 할 확장이 있습니다.

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

UIBarButtonItem제목 대신 배경 이미지가있는 경우 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];
    }
}

0

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;

0

IB에서는 버튼의 제목을 비워두면 나타나지 않습니다 (초기화되지 않습니까?). 빌드를 삭제하고 모든 콘센트 참조를 휴지통에 버리지 않고 막대 버튼 항목을 임시로 사라지게하려면 UI 업데이트 중에 개발 중에이 작업을 자주 수행합니다.

런타임 중에는 동일한 효과가 없으며 버튼 제목을 nil로 설정해도 전체 버튼이 사라지지는 않습니다. 죄송하지만 귀하의 질문에 실제로 답변하지는 않지만 일부에게는 유용 할 수 있습니다.

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


0

여기에 아직 언급하지 않은 솔루션을 여기에 추가하겠습니다. 하나의 컨트롤 상태에 따라 이미지가 달라지는 동적 버튼이 있습니다. 가장 간단한 해결책 nil은 컨트롤이 없으면 이미지를 설정하는 것이 었습니다. 컨트롤이 업데이트 될 때마다 이미지가 업데이트되었으므로 최적입니다. 또한 내가로 설정했는지 확인하기 enabled위해NO .

iOS 7에서는 너비를 최소값으로 설정하지 못했습니다.


0

@lnafziger, @MindSpiker, @vishal 등의 신용으로. 알,

하나의 오른쪽 (또는 왼쪽) 막대 버튼에 도착한 가장 간단한 라이너는 다음과 같습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.