2015-09-09 3 views
1

Я переводил код цели-c в Xamarion.iOS.Xamarin where is Id object

В объективе-c У меня есть следующий код.

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

Проблема в том, что информация 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 версия возвращает идентификатор объекта. NSObject не имеет метода CGRectValue.

Мой вопрос в том, что сделал Xamarin с объектами Id и какой класс следует использовать для получения CGRectValue. Я пробовал кастинг в UIView, но это не помогло, если я не пропустил что-то.

Я пробовал поиск по сайту, но я просто получаю кучу хитов на iOSDevice Id.

Редактировать: У меня не было возможности проверить это, но я думаю, что нашел способ добраться до него, возможно.

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

Он примет меня когда-нибудь, прежде чем я получу шанс, чтобы проверить, если объект, возвращаемый от Id имеет тип UIView.

ответ

1

В Xamarin вы можете использовать строго типизированные уведомления, которые предоставят вам все, что вам нужно, без необходимости удаления данных.

Смотрите пример здесь: http://developer.xamarin.com/api/type/MonoTouch.UIKit.UIKeyboard/

В вашем случае, вместо того, чтобы использовать ObserveDidChangeFrame, вы хотите ObserveDidShow, но идея та же.

Это означает, что если вы все еще хотите использовать другой подход, значение, которое возникает из вызова ObjectForKey, является NSValue, поэтому то, что вы делаете, это результат результата NSValue, а затем использовать свойство CGRectValue.

Обновление: полная ссылка на образец вы хотите:

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

+0

совершенен! Я надеялся, что там будет лучшее решение, а затем кастинг. – mac10688