我试图了解在Monotouch中使用ResponsdsToSelector的模式。例如,以下翻译无效。 (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)帮助我理解命名约定/模式?

谢谢!

最佳答案



选择器在ObjC中以:结尾,并且也需要在C#中使用,即:

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

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

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

10-04 12:02