我需要在类中隐藏自定义delegate
UIViewController
实现的方法,具体取决于BOOL
属性"isHidden"。我从 2 个地方调用一个UIViewController
,我需要隐藏其中一个类的委托方法。例如类 A 和 B 调用我的 UIViewController
并使用 respondsToSelector:@selector(myMethod)
检查此方法,如果BOOL
属性为 TRUE
,则让respondsToSelector
方法返回TRUE
值,否则 - FALSE
。这可能吗?
让委托调用这些方法.. 并根据布尔值在其中执行任务或只是让它通过...
嗯...可以通过运行时交换选择器的实现(例如,交换到什么都不做的实现),但这是一个糟糕的解决方案。这会影响所有实例 - 这种方法使单例看起来像黄金。
相反,请考虑将条件引入myMethod
,因此myMethod不会动态地执行任何操作。
有一种模式,您可以在其中定义委托方法,如下所示:
@protocol MyObjectDelegate <NSObject>
- (void)myObject:(id)myObject processSomeData:(id)someData;
@end
因此,委托控制器知道哪个对象请求此方法,并可以决定要执行的操作。此外,您可以添加一些类似的方法,以在对象实际发送消息之前通知对象是否有权访问此方法
- (BOOL)myObjectCanProcessSomeData:(id)myObject;
当然,有一些技术可以通过与Objective-C运行时交互来添加和删除对象方法,但我不确定这是否是一个好主意。