답변:
버튼을 강력한 콘센트 에 저장하고 (호출하자 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
:- "완료", "저장"등과 같은 막대 버튼 항목에는 효과적입니다. 그러나 텍스트가 아니기 때문에 추가, 휴지통 기호 등과 같은 항목에는 작동하지 않습니다.TintColor
:- "deleteButton"이라는 막대 버튼 항목이있는 경우 :-버튼을 숨기려면 다음 코드를 사용했습니다.
[self.deleteButton setEnabled:NO];
[self.deleteButton setTintColor: [UIColor clearColor]];
버튼을 다시 표시하려면 다음 코드를 사용했습니다.
[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];
deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()
비활성화 및 숨기기, deleteButton.enabled = true; deleteButton.tintColor = nil
다시 활성화하여 정상적으로 표시합니다.
UIColor.clear
을 위해 UIControlState.disabled
및 표시 할 수 있습니다 /를 사용하여 버튼을 숨 깁니다 setEnabled
. 물론 언급했듯이 이것은 텍스트 버튼에만 작동합니다.
간단한 접근 방식은 다음과 같습니다.
hide: barbuttonItem.width = 0.01;
show: barbuttonItem.width = 0; //(0 defaults to normal button width, which is the width of the text)
방금 레티 나 iPad에서 실행했으며 .01은 표시되지 않을 정도로 작습니다.
self.window?.tintColor = APP_PRIMARY_COLOR
AppDelegate에의를, 다음이 작동하지 않습니다
너비를 변경하거나 막대에서 제거하지 않고 단추를 제자리에 숨길 수 있습니다. 스타일을 일반으로 설정하고 제목을 제거한 다음 버튼을 비활성화하면 사라집니다. 복원하려면 변경 사항을 되 돌리십시오.
-(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에서 버튼을 숨기려면 문제와 정확히 관련이 없지만 비슷한 경우가 있습니다.
rightBarButtonItem
다시 설정 하려면 탐색 모음 에서 단추를 분리 할 때 해제되지 않도록 단추 항목이 강력한 IBOutlet에 저장되어 있는지 확인하십시오 .
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
와 UIBarButtonItem
의다음 코드를 실행하여 제거하십시오.
[self.navItem setRightBarButtonItem:nil];
[self.navItem setLeftBarButtonItem:nil];
다음 코드를 실행하여 버튼을 다시 추가하십시오.
[self.navItem setRightBarButtonItem:deleteItem];
[self.navItem setLeftBarButtonItem:addItem];
iOS 8. UIBarButton 커스텀 이미지가있는 항목. 여러 가지 다른 방법을 시도했지만 대부분 도움이되지 않았습니다. 맥스의 솔루션 setTintColor
은 어떤 색으로도 변하지 않았습니다. 나는 이것을 스스로 알아 냈고, 누군가에게 유용 할 것이라고 생각했다.
숨기려면 :
[self.navigationItem.rightBarButtonItem setEnabled:NO];
[self.navigationItem.rightBarButtonItem setImage:nil];
보여주기 위해 :
[self.navigationItem.rightBarButtonItem setEnabled:YES];
[self.navigationItem.rightBarButtonItem setImage:image];
Swift 에서 시도하고 tintColor
AppDelegate의 글꼴 크기와 같은 UIBarButtonItem 디자인 이 있으면 업데이트하지 마십시오 . 표시 될 때 버튼 모양이 완전히 변경됩니다.
텍스트 버튼의 경우 제목을 변경하면 버튼이 사라질 수 있습니다.
if WANT_TO_SHOW {
myBarButtonItem.enabled = true
myBarButtonItem.title = "BUTTON_NAME"
}else{
myBarButtonItem.enabled = false
myBarButtonItem.title = ""
}
나는 다른 주름을 발견 tintColor
하고 isEnabled
Max와 다른 사람에 의해 제안 된 접근 방식 - VoiceOver를이 접근성 활성화되고 버튼이 때 논리적으로 접근 커서가 여전히 모음 단추에 초점을 맞출 것이다, 숨겨진, 그리고 상태는 ( "흐리게"되는 즉 때문에 isEnabled
IS false로 설정). 수락 된 답변의 접근 방식은이 부작용으로 고통받지 않지만 isAccessibilityElement
버튼을 "숨길 때"거짓 으로 설정 하는 또 다른 해결 방법은 다음과 같습니다.
deleteButton.tintColor = UIColor.clear
deleteButton.isEnabled = false
deleteButton.isAccessibilityElement = false
그런 다음 isAccessibilityElement
버튼을 "표시"할 때 다시 true 로 설정 하십시오.
deleteButton.tintColor = UIColor.blue
deleteButton.isEnabled = true
deleteButton.isAccessibilityElement = 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];
UIBarButtonItem을 "숨길"방법은 없습니다. superView에서 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
는 hide / unhide 속성을 갖습니다.
예를 들면 다음과 같습니다.
1. 가지고 UIButton
당신이 숨기기 / 숨기기 취소를 할를.
2.를UIButton
사용자 정의보기로 만듭니다 . 처럼 :
UIButton*myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];//your button
UIBarButtonItem*yourBarButton=[[UIBarButtonItem alloc] initWithCustomView:myButton];
3. 생성 한 것을 숨기거나 숨길 수 있습니다 myButton
.[myButton setHidden:YES];
막대 버튼 항목이 비활성화 된 경우 텍스트 색상을 선명한 색상으로 설정하는 것이 더 깔끔한 옵션 일 수 있습니다. 코멘트에서 설명해야 할 이상한 점은 없습니다. 또한 버튼을 파괴하지 않으므로 관련된 스토리 보드 세그를 계속 유지합니다.
[self.navigationItem.rightBarButtonItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]}
forState:UIControlStateDisabled];
그런 다음 막대 버튼 항목을 숨기고 싶을 때 다음을 수행하면됩니다.
self.navigationItem.rightBarButton.enabled = NO;
숨겨진 속성이 없다는 것은 아쉬운 일이지만 동일한 결과를 제공합니다.
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];
}
}
Swift 3을 사용하는 경우
if (ShowCondition){
self.navigationItem.rightBarButtonItem = self.addAsset_btn
}
else {
self.navigationItem.rightBarButtonItem = nil
}
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];
}
}
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;
@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를 통해 연결된 강한 바 버튼 아이템으로).