Xamarin 哪里是 Id 对象

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 returns 一个具有 CGRectValue 方法的 Id 对象。

但是在 Xamarin 中我有...

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

在 Xamarin 中,NSDictionary returns 一个 NSObject,但是 objective-c 版本 returns 一个 Id 对象。 NSObject 没有 CGRectValue 方法。

我的问题是 Xamarin 对 Id 对象做了什么以及我应该 class 转换什么以获得 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 属性.

更新:完整link到你想要的样本:

http://developer.xamarin.com/api/member/MonoTouch.UIKit.UIKeyboard+Notifications.ObserveDidShow(System.EventHandler%7BMonoTouch.UIKit.UIKeyboardEventArgs%7D)/