2011-11-04 4 views
1

Je tente de créer un UIBarButtonItem avec une vue personnalisée pour une barre d'outils. La vue elle-même est bien affichée, mais quand je clique sur le BarButton, aucune action ne se produit. Il semble que l'événement touch ne soit pas transféré de la vue à l'instance UIBarButtonItem. J'ai vérifié la chaîne de répondeur et je pense que cela semble bon. J'ai également cherché sur Internet et vérifié la documentation d'Apple, mais je ne trouve aucun indice pour mon problème.UIBarButtonItem avec vue personnalisée

Voici mon code:

g__objWeatherButton = new UIBarButtonItem[1]; 

    UIView l__objCustomView = g__objWeatherDisplay.InfoBarButton; // Returns a reference to my custom view 

    UIBarButtonItem l__objButton = new UIBarButtonItem(l__objCustomView); 

    l__objButton.Clicked += delegate {this.WeatherButtonEvent();}; // my action handler 
    l__objButton.Width = 200; 
    l__objButton.Enabled = true; 

    g__objWeatherButton[0] = l__objButton; 

    this.Items = g__objWeatherButton; // "this" is my UIToolbar object 

Quelqu'un peut-il me donner un indice où le problème? Ou un exemple de code de travail (en C# s'il vous plaît - ont trouvé quelques exemples en Objective-C, mais apparemment négligé le tour crucial ;-)

Répondre

5

Pas d'astuce spéciale. Lorsque vous souhaitez ajouter une vue personnalisée à une barre d'outils ou à une barre de navigation, vous devez vous abonner (et répondre) aux événements de cette vue. Ainsi, au lieu d'utiliser un UIView pour conserver votre image, créez un UIButton avec UIButtonType.Custom et abonnez-vous à l'événement TouchUpInside de ce bouton.

Vous initialisez alors comme vous le faites avec le UIView:

UIButton l__objCustomUIButton = UIButton.FromType(UIButtonType.Custom); 
//l__objCustomUIButton.SetImage(UIImage.FromFile("your button image"), UIControlState.Normal); 
l__objCustomUIButton.TouchUpInside += delegate { this.WeatherButtonEvent(); }; 
UIBarButtonItem l__objButton = new UIBarButtonItem(l__objCustomUIButton); 

Assurez-vous que vous déclarez le bouton dans le cadre de la classe.

+0

Hy Dimitris j'avais trop cette idée, mais je l'ai rejeté parce que je pensais qu'il y aurait un moyen plus facile. Maintenant, je l'ai mis en œuvre de cette façon et ça fonctionne bien. Merci de votre aide! –

+0

Vous êtes les bienvenus, heureux d'avoir aidé. –

+1

@ Jörn Veuillez marquer la réponse comme acceptée afin que tout le monde qui cherche ou qui lit sur stackoverflow sache, tout de suite, qu'une réponse est disponible à la question. Merci! – poupou

3

Bien que la réponse m'a mis dans la bonne direction, j'ai toujours eu du mal à afficher le bouton. Seulement après avoir ajouté ce qui suit l'affichage du bouton était avec l'image.

l__objCustomUIButton.Frame = new System.Drawing.RectangleF (0, 0, 40, 40);

Cordialement Paul

0

Il y a un moyen plus facile et le bouton personnalisé réagira maintenant comme un bouton de la barre d'outils régulière.

this.SetToolbarItems(new UIBarButtonItem[] { 
      new UIBarButtonItem(UIBarButtonSystemItem.Refresh, (s,e) =>  { 
       Console.WriteLine("Refresh clicked"); 
      }) 

      , new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) { Width = 50 } 
      , new UIBarButtonItem(UIImage.FromBundle 
            ("wrench_support_white.png"), UIBarButtonItemStyle.Plain, (sender,args) => { 
       Console.WriteLine("Support clicked"); 
      }) 
     }, false); 
Questions connexes