在视图中隐藏一个Bar按钮项

时间:2010-06-15 09:41:24

标签: iphone

如何在视图中隐藏(完成)栏按钮项? 基本上,我有一个视图控制器添加了导航栏(在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!!!
    ...
}

4 个答案:

答案 0 :(得分:3)

您可以使用以下技巧:

  1. 删除图片:self.barButtonItem.image = nil;
  2. 重置Button的宽度:self.barButtonItem.width = 0.0f;
  3. 这对我有用。

答案 1 :(得分:1)

这个应该完美地工作并具有相同的用户效果

doneBarButtonItem.enabled = NO; 

另一个解决方案是仅在用户已输入内容时添加,并在没有任何内容时将其删除

答案 2 :(得分:0)

您可以调整背景位置来完成此操作:

[doneBarButtonItem setBackgroundVerticalPositionAdjustment:1000000 forBarMetrics:1000000];

将背景位置的偏移设置为一个非常大的值以隐藏它。

[doneBarButtonItem setBackgroundVerticalPositionAdjustment:0.0000000000001 forBarMetrics:0.0000000000000001];

然后像这样切换回来。

注意:您必须将两个偏移设置为大于0的值才能取回按钮,否则它将不会显示。

答案 3 :(得分: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];
        }
    }
相关问题