/ / Xamarin gdzie jest obiekt Id - c #, ios, obiektyw-c, xamarin.ios

Xamarin gdzie jest obiekt Id - c #, ios, target-c, xamarin.ios

Tłumaczę kod Object-C na Xamarion.iOS.

W celu-c mam następujący kod.

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

Problem polega na tym, że info objectForKey zwraca obiekt Id, który ma metodę CGRectValue.

Ale w Xamarin mam ...

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

W Xamarin NSDictionary zwraca obiekt NSObject, ale wersja obiektywna c zwraca obiekt Id. NSObject nie ma metody CGRectValue.

Moje pytanie brzmi: co Xamarin zrobił z obiektami Id i jaką klasę powinienem rzucić, aby uzyskać CGRectValue. „Próbowałem rzutować na UIView, ale to nie pomogło, chyba że coś przeoczyłem.

Próbowałem googli, ale po prostu dostałem kilka trafień na identyfikatory urządzeń iOS.

Edytować: Nie miałem okazji tego przetestować, ale myślę, że znalazłem sposób, żeby to osiągnąć.

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

Zajmie mi to trochę czasu, zanim będę miał okazję przetestować, czy obiekt zwrócony z tego Id jest typu UIView.

Odpowiedzi:

1 dla odpowiedzi № 1

W Xamarin możesz używać silnie wpisanych powiadomień, które zapewnią Ci wszystko, czego potrzebujesz, bez konieczności rozpakowywania danych.

Zobacz przykład tutaj: http://developer.xamarin.com/api/type/MonoTouch.UIKit.UIKeyboard/

W twoim przypadku, zamiast używać ObserveDidChangeFrame, chcesz ObserveDidShow, ale pomysł jest taki sam.

To powiedziawszy, jeśli nadal chcesz używać drugiegopodejście, wartość wychodząca z wywołania ObjectForKey jest wartością NSValue, więc to, co robisz, to rzut wyniku na NSValue, a następnie użycie właściwości CGRectValue.

Aktualizacja: pełny link do wybranej próbki:

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