我正在尝试将以下iOS代码转换为MonoTouch,并且无法找出@selector(removebar)代码的正确转换。任何人都可以提供有关处理@selector的最佳方法的指导(因为我在其他地方也遇到过这种情况):
- (void)keyboardWillShow:(NSNotification *)note {
[self performSelector:@selector(removeBar) withObject:nil afterDelay:0];
}
我的C#代码是:
NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification,
notify => this.PerformSelector(...stuck...);
我基本上试图隐藏键盘上显示的上一个/下一个按钮。
提前感谢您的帮助。
答案 0 :(得分:2)
NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification, removeBar);
其中removeBar
是在别处定义的方法。
void removeBar (NSNotification notification)
{
//Do whatever you want here
}
或者,如果您更喜欢使用lambda:
NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillShowNotification,
notify => {
/* Do your stuffs here */
});
答案 1 :(得分:2)
Stephane展示了一种可以使用我们改进的绑定来转换它的方法。
让我分享一个更好的一个。您正在寻找的是键盘通知,我们可以方便地为您提供强大的类型,并且会让您的生活更轻松:
http://iosapi.xamarin.com/?link=M%3aMonoTouch.UIKit.UIKeyboard%2bNotifications.ObserveWillShow
它包含一个完整示例,向您展示如何访问为您的通知提供的强类型数据。
答案 2 :(得分:1)
你必须考虑到:
[self performSelector:@selector(removeBar) withObject:nil afterDelay:0];
与
完全相同[self removeBar];
对performSelector
的调用只是使用反射的方法调用。所以你真正需要翻译成C#的是这段代码:
- (void)keyboardWillShow:(NSNotification *)note {
[self removeBar];
}
我想这也是通知订阅,总结了这段代码:
protected virtual void RegisterForKeyboardNotifications()
{
NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillHideNotification, OnKeyboardNotification);
NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification, OnKeyboardNotification);
}
private void OnKeyboardNotification (NSNotification notification)
{
var keyboardVisible = notification.Name == UIKeyboard.WillShowNotification;
if (keyboardVisible)
{
// Hide the bar
}
else
{
// Show the bar again
}
}
您通常希望在RegisterForKeyboardNotifications
上致电ViewDidLoad
。
干杯!