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

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

UIBarButtonItem 숨겨진 속성이 없으며 지금까지 찾은 예제는 탐색 모음 버튼을 nil로 설정하는 것과 관련이 있습니다.이 버튼을 다시 표시해야하기 때문에 여기에서 수행하고 싶지는 않습니다. 내가 버튼을 IBOutlet에 연결하면이를 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];
}

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


답변

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

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

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

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

[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)

방금 레티 나 iPad에서 실행했으며 .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의보기에서 NavigationBar에 대한 IBOutlet입니다. 여기에서 단추를 숨기거나 특정 조건에 따라 표시하려고했습니다. 따라서 “If”의 조건을 테스트하고 true이면 대상보기의 viewDidLoad 메소드에서 버튼을 nil로 설정합니다.

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


답변

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을 실행 중이며 다음 솔루션이 적합합니다.

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

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

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