有没有理由我不能将null作为标题传递给MonoTouch中的UIActionSheet构造函数?

时间:2012-01-26 01:36:36

标签: c# .net ios mono xamarin.ios

我正在尝试制作删除确认操作表,就像您在OmniGraffle,GarageBand和其他几个应用中看到的那样。我想要一个没有标题的动作表和一个大的红色删除按钮。

在阅读UIActionSheet构造函数的文档时,它说:

  

标题

     

要在操作表的标题区域中显示的字符串。如果您不想在标题区域中显示任何文本,请传递nil。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIActionSheet_Class/Reference/Reference.html

但是,如果我在MonoTouch中执行此操作:

UIActionSheet actionSheet = new UIActionSheet(
    null, 
    null,
    null,
    "Delete"
);

我得到NullArgumentException。如果我尝试通过传入一个虚拟字符串然后执行actionSheet.Title = null;来解决此问题。传入string.Empty工作正常,但在我不想要的按钮上面给了我额外的空间。

所以:

  1. 是否有这种行为的原因,或者它只是一个MonoTouch错误?
  2. 我可以用一种解决方法来获得我想要的外观和感觉吗?
  3. enter image description here

    这个(带有一个大的红色删除按钮)在MonoTouch中不会太难!

    但我坚持这个:

    enter image description here

    查看顶部的额外空间?我该怎么办?

3 个答案:

答案 0 :(得分:3)

非常感谢填写错误报告。对于未来的MonoTouch版本,已经修复了这个问题。

在那之前你应该能够取代它:

UIActionSheet actionSheet = new UIActionSheet(
    null, 
    null,
    null,
    "Delete"
);

 UIActionSheet actionSheet = new UIActionSheet ();
 actionSheet.DestructiveButtonIndex = actionSheet.AddButton ("Delete");

如果这不包括您考虑的用例,请告诉我,我会尝试找到另一种解决方法。

答案 1 :(得分:2)

根据Apple文档的说法,为标题传递nil非常完美valid

这听起来像是UIActionSheet指定初始化程序的MonoTouch绑定中的错误。我搜索了Xamarin Bugzilla,这似乎不是一个已知的问题。

我会提交一个错误,并链接到这个问题,应该是一个简单的解决方案。他们甚至可以为您提供解决方法; - )

答案 2 :(得分:0)

是的,有。 Null不是objective-c的一部分。 你需要使用Nil。仔细查看您发布的文档。

它们之间的区别在于null不是一个对象而是来自c,而nil是一个对象,是objective-c超集的一部分。