ios - 单点触控 : Using SetBackgroundImage() throws Selector error

标签 ios xamarin.ios

我有一个要添加到 UINavigationBar 的简单按钮,Min OS 是 3.2,我们使用默认编译器进行编译。我有 MT 5.0:

            saleImg = UIImage.FromFileUncached (shoppingImg);
            saleButton = new UIBarButtonItem ("", UIBarButtonItemStyle.Bordered, (s, o) => {ItunesHelper.Open (); });
            saleButton.SetBackgroundImage(saleImg,UIControlState.Normal,UIBarMetrics.Default);
            saleButton.SetBackgroundImage(saleImg,UIControlState.Selected, UIBarMetrics.Default);
            saleButton.SetBackgroundImage(saleImg,UIControlState.Highlighted, UIBarMetrics.Default);

但是在运行时会抛出错误:

抛出 Objective-C 异常。名称:NSInvalidArgumentException 原因:-[UIBarButtonItem setBackgroundImage:forState:barMetrics:]: 无法识别的选择器发送到实例 0x76d4d00

最佳答案

UIBarButtonItem.SetBackgroundImage 方法是在 iOS 5 中引入的.由于您收到“无法识别的选择器...”消息,我只能假设您在 iOS 版本低于 5.0 的设备上运行该应用程序。

如果您希望您的应用向后兼容,请创建一个按钮并使用 UIBarButtonItem(UIView) 构造函数初始化 UIBarButtonItem:

UIButton button = UIButton.FromType(UIButtonType.Custom);
button.SetBackgroundImage(saleImg, UIControlState.Normal);
button.TouchUpInside += (s, o) => {ItunesHelper.Open (); };
UIBarButtonItem saleButton = new UIBarButtonItem(button);

设置最低操作系统版本并不意味着 MonoDevelop 或编译器会通知您 API 兼容性。它只是 Info.plist 中的一个设置,它将决定您的应用程序是否会出现在该版本设备的 App Store 中。

关于ios - 单点触控 : Using SetBackgroundImage() throws Selector error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206903/

相关文章:

ios - 完成 iOS 后台任务,将其移动到前台

pdf - 使用 Xamarin 下载文件的正确方法?

ios - Swift Parse - 方法不会停止执行

iphone - iOS 状态栏会自行更改颜色以匹配导航栏

ios - 向 Nib 启动的 View 添加边框和阴影

xamarin.ios - Monotouch - 全局变量

ios - 如何调试 iOS 应用程序中随机发生的崩溃?

ios - CLLocation高程精度

c# - 如何从 Xamarin.Forms (iOS) 中删除顶部栏?

c# - Xamarin Studio iOS 程序集错误