1

我正在尝试将以下 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...);

我基本上是想隐藏键盘上显示的 Prev/Next 按钮。

提前感谢您的帮助。

4

3 回答 3

2
NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification, removeBar);

whereremoveBar是在别处定义的方法。

void removeBar (NSNotification notification)
{
    //Do whatever you want here
}

或者,如果您更喜欢使用 lambda:

NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillShowNotification, 
                                                notify => { 
                                                    /* Do your stuffs here */
                                                });
于 2013-09-02T20:07:04.627 回答
2

Stephane 展示了一种方法,您可以使用我们改进的绑定来转换它。

让我分享一个更好的。您正在寻找的是键盘通知,我们方便地为其提供了强大的类型,并将让您的生活更轻松:

http://iosapi.xamarin.com/?link=M%3aMonoTouch.UIKit.UIKeyboard%2bNotifications.ObserveWillShow

它包含一个完整的示例,向您展示如何访问为您的通知提供的强类型数据。

于 2013-09-03T18:43:05.740 回答
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
    }
}

你通常想打电话RegisterForKeyboardNotificationsViewDidLoad

干杯!

于 2013-09-03T15:54:47.640 回答