4

我有一个UIBarButtonItem. 当它收到无法处理的消息时,我希望它将该消息转发到特定的视图控制器。

我想我也许可以使用条形按钮项的forwardingTargetForSelector:方法来完成此操作,但显然在 type 的对象上找不到这样的属性UIBarButtonItem。(术语点:这是否意味着forwardingTargetForSelector:是私有属性?编辑:等等,我想我很困惑......最后带有冒号的方法不是属性......所以你可以公开一个方法(比如一个getter/setter)传递给哪些参数?)

这是否意味着为了设置 I 的值,forwardingTargetForSelector:我必须在我要设置的对象的 .m 文件中进行设置?这意味着我必须继承我的 UIBarButtonItem?

如果是这样,为什么这不是 NSObjects 的公共属性?

此外,实现我的转发目标的最佳方法是什么,最好避免子类化?

附加信息:

这一切都源于我倾向于重复使用单个动作来响应按下相同按钮的各种实例。该操作当前包含在我的委托中(请参阅我应该如何实现在各种 VC 中使用的 [几乎] 相同的操作?(答案:使用类别))并且不同之处在于它应该向实例化的视图控制器发送 presentViewController 消息发送动作的按钮。因此,在操作中,我可以将 presentViewController 消息发送到sender,这是按钮的一个实例,并且我希望能够将该消息转发到创建该按钮实例的视图控制器,如果我可以做到这一点在每个按钮在其各自的视图控制器中实例化后立即设置它的转发属性。

我希望避免“为什么”只是为了让问题更短,但是你去吧。

4

1 回答 1

2

forwardingTargetForSelector:不是真正的财产;这更像是当实例未响应消息时运行时询问实例的问题。

不能@property/意义上的属性,因为每个选择器可能有不同的目标;它背后需要一个映射。这不是声明的属性的工作方式。

UIBarButtonItem继承自NSObject,并且它与所有其他方法一起继承此方法,但是您不能从实例外部“设置”选择器的转发目标(无论如何,无需创建一些其他机制来允许您这样做 - 可能,但默认情况下不可用)。

为了使用这个方法,是的,你必须在进行转发的类中实现它。这确实意味着子类化。这也意味着转发实例需要对它所转发的对象有一个引用;这需要精心设计。

forwardingTargetForSelector:几乎肯定不是实现任何目标的正确方法。总的来说,事实上,它有点深奥。

我不确定您到底要解决什么问题(“使按钮转发它不响应的消息”仍然很笼统-特别是,为什么有必要这样做?),因此很难做到精确的。

于 2013-05-15T05:35:46.803 回答