在MonoTouch中使用PerformSelector和@selector
本文关键字:PerformSelector @selector MonoTouch | 更新日期: 2023-09-27 18:30:06
我正在尝试将以下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...);
我基本上是想隐藏键盘上显示的上一个/下一个按钮。
提前感谢您的帮助。
NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification, removeBar);
其中CCD_ 1是在别处定义的方法。
void removeBar (NSNotification notification)
{
//Do whatever you want here
}
或者,如果您喜欢使用lambda:
NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillShowNotification,
notify => {
/* Do your stuffs here */
});
Stephane展示了一种使用我们改进的绑定进行转换的方法。
让我分享一个更好的。您正在寻找的是一个键盘通知,我们方便地为其提供强类型,并将使您的生活更轻松:
http://iosapi.xamarin.com/?link=M%3aMonoTouch.UIKit.UIKeyboard%2bNotifications.ObserveWillShow
它包含一个完整的示例,向您展示如何访问为通知提供的强类型数据。
您必须考虑到:
[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
}
}
您通常希望在ViewDidLoad
上调用RegisterForKeyboardNotifications
。
干杯!