Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有自定义视图的UIBarButtonItem_C#_Ios_Xamarin.ios - Fatal编程技术网

C# 具有自定义视图的UIBarButtonItem

C# 具有自定义视图的UIBarButtonItem,c#,ios,xamarin.ios,C#,Ios,Xamarin.ios,我尝试创建一个UIBarButtonItem,其中包含工具栏的自定义视图。视图本身显示良好,但当我单击BarButton时,不会发生任何操作。看起来触摸事件没有从视图转发到UIBarButtonItem实例。我已经检查了应答器链,我认为它看起来不错。我也搜索了互联网,查阅了苹果的文档,但没有找到任何关于我问题的线索 这是我的密码: g__objWeatherButton = new UIBarButtonItem[1]; UIView l__objCustomView = g__o

我尝试创建一个UIBarButtonItem,其中包含工具栏的自定义视图。视图本身显示良好,但当我单击BarButton时,不会发生任何操作。看起来触摸事件没有从视图转发到UIBarButtonItem实例。我已经检查了应答器链,我认为它看起来不错。我也搜索了互联网,查阅了苹果的文档,但没有找到任何关于我问题的线索

这是我的密码:

   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

有人能告诉我问题出在哪里吗?或者一个工作代码示例(在c中,请-在Objective-c中找到了一些示例,但显然忽略了关键技巧;-)

没有特殊技巧。如果要将自定义视图添加到工具栏或导航栏,则应订阅(并响应)该视图的事件。因此,与其使用UIView保存图像,不如使用UIButtonType.Custom创建一个UIButton,并订阅该按钮的TouchUpInside事件

然后像使用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);

只需确保在类范围中声明按钮

没有什么特别的把戏。如果要将自定义视图添加到工具栏或导航栏,则应订阅(并响应)该视图的事件。因此,与其使用UIView保存图像,不如使用UIButtonType.Custom创建一个UIButton,并订阅该按钮的TouchUpInside事件

然后像使用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);

只需确保在类范围中声明按钮

虽然答案给了我正确的方向,但我仍然无法显示按钮。只有在我添加了以下内容后,按钮才会显示图像

l__objCustomUIButton.Frame=新系统.绘图.矩形F(0,0,40,40)

问候
保罗

虽然答案让我找到了正确的方向,但我仍然无法显示按钮。只有在我添加了以下内容后,按钮才会显示图像

l__objCustomUIButton.Frame=新系统.绘图.矩形F(0,0,40,40)

问候
Paul

有一种更简单的方法,自定义按钮现在的反应与常规工具栏按钮类似

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

有一种更简单的方法,自定义按钮现在将像常规工具栏按钮一样反应

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

Hy Dimitris我也有这个想法,但我拒绝了,因为我认为会有一个更简单的方法。现在我已经用这种方式实现了它,它工作得很好。谢谢你的帮助@Jörn请将答案标记为已接受,以便在stackoverflow上搜索或阅读的每个人都会立即知道该问题的答案可用。谢谢Hy Dimitris我也有这个想法,但我拒绝了,因为我认为会有一个更简单的方法。现在我已经用这种方式实现了它,它工作得很好。谢谢你的帮助@Jörn请将答案标记为已接受,以便在stackoverflow上搜索或阅读的每个人都会立即知道该问题的答案可用。谢谢