Xamarin where is Id object



我正在翻译objective-c代码到Xamarion.iOS。

在objective-c中,我有以下代码:

- (void)keyboardWasShown: (NSNotification*)aNotification
{
  NSDictionary* info = [aNotification userInfo];
  CGSize kbSize = [[info objectForKey:UIKeyboadFrameBeginUserInfoKey] CGRectValue].size;
  . . .
}

问题是info objectForKey返回一个Id对象,该对象具有CGRectValue方法。

但是在Xamarin中我有…

private void KeyboardWasShown(NSNotification notification)
{
   var info = notification.UserInfo;
   var kbSize = (info.ObjectForKey(UIKit.UIKeyboard.FrameBeginUserInfoKey)).??
 . . .
}

在Xamarin中,NSDictionary返回一个NSObject,但是objective-c版本返回一个Id Object。NSObject没有CGRectValue方法

我的问题是Xamarin对Id对象做了什么,我应该转换什么类来获得CGRectValue。我试过转换到一个UIView,但那没有帮助,除非我错过了一些东西。

我试着谷歌一下但是我只在iOSDevice的Id上得到一堆点击。

编辑:

我还没有机会测试这个,但我想我找到了一种可能的方法。

var kbSize = ((UIView) info.ObjectForKey(UIKit.UIKeyboard.FrameBeginUserInfoKey)).Frame.Size;

在我有机会测试从Id返回的对象是否属于UIView类型之前,我将花费一些时间。

在Xamarin中,您可以使用强类型通知,它将为您提供所需的一切,而无需打开数据框。

请看下面的例子:http://developer.xamarin.com/api/type/MonoTouch.UIKit.UIKeyboard/

在您的例子中,您想要使用ObserveDidShow而不是ObserveDidChangeFrame,但其思想是相同的。

也就是说,如果你仍然想使用另一种方法,从ObjectForKey调用出来的值是一个NSValue,所以你要做的是将结果转换为NSValue,然后使用CGRectValue属性。

更新:您想要的示例的完整链接:

http://developer.xamarin.com/api/member/MonoTouch.UIKit.UIKeyboard + Notifications.ObserveDidShow (System.EventHandler % 7 bmonotouch.uikit.uikeyboardeventargs % 7 d)/

最新更新