UIView和Subview代表

Dav*_*lar 5 delegates objective-c uiview ios xamarin

我只是想清除一些与委托模式的混淆,当有多个UIViews和这些视图的子视图时应该构建它.为了说清楚,让我们定义一些变量.

让我们将这些对象定义为:

  • 视图控制器 A
  • 的UIView B
  • 子视图 C

现在,我理解委托模式是如何工作的(我认为),虽然我不确定如何在嵌套的UIViews中实现这种模式.我有一些问题是:

应该C包含一个由它的超级视图(B)实现的委托吗?

如果是,B那么应该将此信息传递给它的委托ViewController(A)?

这是一个场景,假设C有一个UITextView,这个文本视图的高度由从API服务获取的字符串决定.B无法访问API,因为此作业应通过ViewController(A)完成.

C然后应该包含一个指向的代表:

  1. ViewController的(A)委托实现?
  2. UIView的(B)委托实现?
  3. 其他?

如果答案是(2)那么应该B调用ViewController(A)并通过一系列事件传递这些信息?

这是一个小视觉:

A <IBDelegate><--- B <ICDelegate><--- C来电Delegate.OnApiComplete(float height);

在这种情况下,"代表"是什么?(ICDelegateIBDelegate).什么是事件链?

当责任应该在控制器上时,我只是试图避免任何不必要的逻辑渗入UIView.

我知道您可以使用UIViews之间的共享对象来解决大多数情况,但是当谈到网络服务时,需要通过某种回调来检索这些值.

我需要进一步澄清,请告诉我.任何帮助是极大的赞赏.

Abh*_*nav 6

所以,你有这样的情况:

ViewController A - >视图B - >视图C.

我会尽量保证我ViewController A需要决策都View BView C这样的:

  1. 创建一个协议ViewDelegate,View BView C 在其中保留和委托方法.
  2. 创建属性@property (nonatomic, weak) id <ViewDelegate> delegate;View B.
  3. 创建属性@property (nonatomic, weak) id <ViewDelegate> delegate;View C.
  4. ViewController A实例化View B设置self为委托时.喜欢viewBObj.delegate = self.
  5. View B实例化View C设置self.delegate为委托时.喜欢viewBObj.delegate = self.delegate.
  6. 这将使得ViewController A响应View BView C委托事件.