2010-06-15 3 views
1

Comment pouvez-vous masquer l'élément de bouton de barre (terminé) dans une vue? Fondamentalement, j'ai un contrôleur de vue ajouté avec la barre de navigation (dans IB) puis, j'ai également ajouté un élément de barre dans la barre de navigation. Je veux juste que l'élément du bouton de barre (terminé) soit caché. Lorsque l'entrée est dans la vue de texte, le bouton (terminé) est déjà visible.Masquage d'un élément de bouton Barre dans la vue

Une idée sur cette implémentation sur un contrôleur de vue?

Voici mon exemple de code:

@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; 

fichier .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!!! 
    ... 
} 

Répondre

1

Celui-ci devrait fonctionner parfaitement et a les mêmes effets utilisateur

doneBarButtonItem.enabled = NO; 

L'autre solution est d'ajouter seulement quand l'utilisateur entre déjà quelque chose et l'enlève quand il n'y a rien

+0

Avec cette approche, le bouton s'affiche toujours mais il est désactivé. Cela ne fonctionne pas lorsque vous avez besoin de supprimer complètement le bouton, par exemple pour les fonctionnalités avancées activées uniquement pour certains utilisateurs. – mikemeli

3

Vous pouvez utiliser la technique suivante:

  1. Retirez l'image: self.barButtonItem.image = nil;
  2. Réinitialiser la largeur du bouton: self.barButtonItem.width = 0.0f;

Cela a fonctionné pour moi.

+1

avec cette approche le bouton peut sembler disparaître mais il est vraiment là. Si vous appuyez dessus, l'effet de flux et l'action fonctionnent, ce que vous ne voulez pas. C'est une approche buggy. – mikemeli

+0

Cela a fonctionné pour moi. mikemeli, Il suffit de mettre hors service le bouton –

+0

@mikemeli Ceci est une solution de rechange et a fonctionné pour moi. –

0

Vous pouvez le réglage de la position d'arrière-plan pour ce faire:

[doneBarButtonItem setBackgroundVerticalPositionAdjustment:1000000 forBarMetrics:1000000]; 

Régler le décalage de la position d'arrière-plan à une valeur très importante pour le cacher.

[doneBarButtonItem setBackgroundVerticalPositionAdjustment:0.0000000000001 forBarMetrics:0.0000000000000001]; 

commutateur reprenais, comme ça.

Remarque: Vous devez définir les deux offsets sur une valeur supérieure à 0 pour récupérer le bouton, sinon il n'apparaîtra pas.

+0

Ceci est un hack et ça ne marche pas! – mikemeli

+0

Ne fonctionne pas? Cela fonctionne pour moi sur iOS SDK 6.1. Quelle version d'iOS SDK utilisez-vous? – imikay

0

Aucune des options ci-dessus n'a fonctionné pour moi. L'approche propre consiste à avoir un IBOutlet dans la barre d'outils et à utiliser la méthode setItems pour ajouter/retirer le bouton de celui-ci. Alors que le bouton est caché, je maintiens une forte référence à celui-ci, donc je peux le montrer plus tard. Ce code suppose que vous avez configuré le fichier xib pour ce RootViewController avec la barre d'outils et le bouton de la barre que vous souhaitez masquer/afficher plus tard.

@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]; 
     } 
    } 
Questions connexes