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
★★★★★★★★★★★★★★★★★」UIBarButtonItem
s 제거할 다음 코드 실행
[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에서는enable
isEnable
★★★★★★★★★★★★★★★★★★.
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
★★★★★★★★★★★★★★★★★」isEnabled
Max 및 기타에 의해 제안된 접근법 - 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를 사용해보세요.업데이트하지 마세요.tintColor
AppDelegate(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
'sourcecode' 카테고리의 다른 글
VBA는 OOP 언어이며 다형성을 지원합니까? (0) | 2023.04.09 |
---|---|
WPF 애플리케이션을 재기동하려면 어떻게 해야 하나요? (0) | 2023.04.09 |
WPF의 텍스트 블록에 스트로크 적용 (0) | 2023.04.09 |
SQL Server에 Excel 파일을 Import하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
xargs를 사용한 호출 셸 함수 (0) | 2023.04.09 |