【发布时间】:2013-04-19 00:14:50
【问题描述】:
Cocoa 广泛使用委托来为异步操作提供(除其他外)回调方法。但是,我个人讨厌委托模型以及它如何通过处理非常具体的子操作来污染当前类。 UIAlertView 就是一个很好的例子。
因此,我想知道是否可以通过块简单地创建一个满足委托协议(例如UIAlertViewDelegate)要求的匿名委托对象,并将该匿名对象传递到需要委托引用的任何地方。
我想像这样:
id myDelegate = @{
alertView:alertView didDismissWithButtonIndex:index = ^ {
...
}
};
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:... message:... delegate:myDelegate cancelButtonTitle:... otherButtonTitles:...;
[alertView show];
我听说 Objective-C 有一些很好的动态语言特性,但我不知道如何简单地向对象添加方法/选择器。这可以以相对简单的方式完成吗?
【问题讨论】:
-
一个月前有一个关于完全通用代表的问题:stackoverflow.com/q/15438410/603977,还有一个特定于
UIAlertViewDegate的旧问题,但我目前找不到。 -
当然,您可以为委托创建一个完全不同的对象。例如,它不必是您的 ViewController。 (但 Objective-C 的代码块让我头晕目眩,所以我避开了它们。)
-
希望 Apple 能够像在 Mac 端为 NSOpenPanel 所做的那样,为 UIAlertView 之类的东西添加一个基于块的 API。
-
对不起,我想到的另一个是
UIActionSheet,而不是UIAlertView:Attaching an object to a UIActionSheet。
标签: objective-c cocoa-touch cocoa