2010-06-15 81 views
1

如何能夠隱藏視圖中的(完成)酒吧按鈕項? 基本上,我有一個視圖控制器添加了導航欄(在IB),然後,我還添加了一個欄按鈕項目導航欄。 我只是想最初(完成)欄按鈕項目被隱藏..當輸入是在文本視圖中,(完成)按鈕已經可見。隱藏視圖中的酒吧按鈕項

在視圖控制器上的這個實現的任何想法?

這裏是我的示例代碼:

@interface MyTextViewViewController : UIViewController <UITextViewDelegate> 
{ 
UITextView *m_textView; 
UIBarButtonItem *doneBarButtonItem; 
} 

@property(nonatomic,retain) IBOutlet UITextView *m_textView; 
@property(nonatomic,retain) IBOutlet UIBarButtonItem *doneBarButtonItem; 

- (IBAction)saveAction:(id)sender; 

.m文件:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    doneBarButtonItem.hidden = YES; --> compile error!!! 
} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    doneBarButtonItem.hidden = NO; --> compile error!!! 
} 

- (IBAction)saveAction:(id)sender 
{ 
    doneBarButtonItem.hidden = YES; --> compile error!!! 
    ... 
} 

回答

1

這應該很好地工作,並具有相同的用戶影響

doneBarButtonItem.enabled = NO; 

另一種解決方案是增加它只有當用戶已經進入東西,並在沒有東西時將其移除

+0

使用這種方法,按鈕仍然顯示,但它被禁用。當您需要完全刪除按鈕時,這不起作用,例如僅針對特定用戶啓用的高級功能。 – mikemeli 2013-03-20 23:32:53

3

可以使用以下技術:

  1. 取出圖象:self.barButtonItem.image =零;
  2. 重置Button的寬度:self.barButtonItem.width = 0.0f;

這對我有效。

+1

使用這種方法,按鈕可能似乎消失,但它確實存在。如果你點擊它,它會產生流動效果和行動效果,這是你不想要的。這是一個錯誤的方法。 – mikemeli 2013-03-20 23:32:04

+0

這對我有用。 mikemeli,只需設置禁用按鈕 – 2013-12-10 03:51:18

+0

@mikemeli這是解決方法,併爲我工作。 – 2014-03-04 14:03:34

0

您可以調整背景位置來實現:

[doneBarButtonItem setBackgroundVerticalPositionAdjustment:1000000 forBarMetrics:1000000]; 

設置偏移後臺位置的一個非常大的值,將其隱藏。

[doneBarButtonItem setBackgroundVerticalPositionAdjustment:0.0000000000001 forBarMetrics:0.0000000000000001]; 

然後像這樣切換回來。

注意:您必須將兩個偏移量設置爲大於0的值才能取回按鈕,否則將不顯示。

+0

這是一個黑客,它不工作! – mikemeli 2013-03-20 23:33:14

+0

不起作用?它適用於iOS SDK 6.1。您使用的是哪個版本的iOS SDK? – imikay 2013-03-21 01:48:13

0

上述選項都不適用於我。乾淨的方法是在工具欄上放置一個IBOutlet,並使用setItems方法向其添加/刪除按鈕。 當按鈕被隱藏時,我保持強烈的引用,所以我可以稍後再顯示它。 此代碼假定您爲此RootViewController設置了xib,並帶有您希望稍後隱藏/顯示的工具欄和欄按鈕。

@interface RootViewController() 

    @property (weak, nonatomic) IBOutlet UIToolbar *toolbar; 
    @property (nonatomic, strong) UIBarButtonItem * barButtonItem; 

    @end 


    - (void) showSettingsBarButtonItem{ 

     NSMutableArray * toolbarButtonItems = [NSMutableArray arrayWithArray: 
               [self.toolbar items]]; 

     bool found = NO; 

     for(UIBarButtonItem * tmpButton in toolbarButtonItems){ 

      if([tmpButton tag] == 500){ //settings button. 

       //keep it 
       found = YES; 
       break; 
      } 
     } 

     if(found == NO){ 

      [toolbarButtonItems insertObject:self.barButtonItem atIndex:1]; //insert item at index you like. 

      [self.toolbar setItems:toolbarButtonItems]; 
     } 
    } 

    - (void) hideSettingsBarButtonItem{ 


     NSMutableArray * toolbarButtonItems = [NSMutableArray arrayWithArray: 
               [self.toolbar items]]; 

     bool found = NO; 

     for(UIBarButtonItem * tmpButton in toolbarButtonItems){ 

      if([tmpButton tag] == 500){ //settings button tag. set in IB. 

       found = YES; 
       self.barButtonItem = tmpButton; //save it for later. 
               //should keep a reference to your VC. 

       [toolbarButtonItems removeObject:tmpButton]; 

       break; 
      } 
     } 

     if(found == YES){ 

      [self.toolbar setItems:toolbarButtonItems]; 
     } 
    }