如何在Monotouch中使用iOS的RespondsToSelector?

5
我将尝试理解在Monotouch中使用RespondsToSelector的模式。例如,以下翻译不起作用。(LayoutMargins用于在iOS 8中设置单元格缩进)
Objective C:
if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [tableView setLayoutMargins:UIEdgeInsetsZero];
}

转换为Monotouch

if (this.TableView.RespondsToSelector(new Selector("setLayoutMargins")))
    this.TableView.LayoutMargins = UIEdgeInsets.Zero;

我相信我只是在命名"setLayoutMargins"上遇到了问题。我也尝试过"LayoutMargins"。有人能帮我1)修正这个语句,2)帮我理解命名惯例/模式吗?
谢谢!
1个回答

15

我相信我的问题只是命名“setLayoutMargins”

在ObjC中,选择器以:结尾,在C#中也需要有,即:

if (this.TableView.RespondsToSelector(new Selector("setLayoutMargins:")))

注意:额外的:表示在调用选择器时需要一个参数。这就是为什么set*有它而getter没有的原因。

检查选择器的另一种替代方法是使用版本检查。


太好了,难怪我搞不定。从没想过要加上“:”。感谢您的快速回答! - Ender2050

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接