0

我需要delegateUIViewController类中隐藏我自定义的实现方法,具体取决于BOOL属性“isHidden”。我从 2 个地方调用一个UIViewController,我需要从这些类之一中隐藏委托方法。例如 A 类和 B 类调用 myUIViewController并检查此方法respondsToSelector:@selector(myMethod),如果BOOL属性为TRUE,则让respondsToSelector方法返回TRUE值,否则 - FALSE。这可能吗?

4

3 回答 3

2

让委托调用这些方法......并根据布尔值在其中执行任务或让它通过......

于 2012-08-16T08:33:41.267 回答
1

嗯……可以通过运行时交换选择器的实现(例如,到什么都不做的实现),但这是一个糟糕的解决方案。这会影响所有实例——这种方法使单例看起来像黄金。

相反,请考虑将条件引入myMethod,因此 myMethod 不会动态执行任何操作。

于 2012-08-16T08:33:05.330 回答
1

有一种模式,您可以在其中定义委托方法,如下所示:

@protocol MyObjectDelegate <NSObject>

    - (void)myObject:(id)myObject processSomeData:(id)someData;

@end

所以你的委托控制器知道哪个对象请求这个方法并且可以决定做什么。此外,您可以添加一些类似这样的方法来通知对象是否有权在实际发送消息之前访问此方法

- (BOOL)myObjectCanProcessSomeData:(id)myObject;

当然,有一些技术可以通过与 Objective-C 运行时交互来添加和删除对象方法,但我不确定这是否是个好主意。

于 2012-08-16T08:45:47.117 回答