【问题标题】:Protocols & Delegate when using ContainerView使用容器视图时的协议和委托
【发布时间】:2014-06-12 18:02:28
【问题描述】:

我有一个带有 ContainerView 的 UIViewController(根),它以编程方式加载一个 nib:

UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"KeyboardView" 
    owner:self options:nil] objectAtIndex:0];

[self.view addSubview:containerView];

我有一个与此 .xib 文件 (UIView) 挂钩的类文件(.h 和 .m)。
我的 .xib 文件 (UIView) 有一个按钮和一个操作。

当这个动作被调用和执行时,我 removeFromParent 我的 .xib 文件。

我的 ViewController.m (root) 如何处理我 removeFromParent 我的 nib 文件的确切时间?

我尝试使用 Protocol & Delegate 但失败了。
我尝试在 prepareForSegue 方法上设置 delegate=self 但不成功。

我的问题是:
我的 UIViewController (root) 以编程方式调用我的键盘 (.xib)。
我键盘上的所有操作都由挂接到 .xib 的类处理。
操作完成后,我从父级中删除 .nib 文件(我模拟关闭)。

ViewController.m (root) 中的方法如何知道我关闭了我的 .xib 文件?

【问题讨论】:

  • 也发布您的委托方法的代码。
  • 你的问题不是很清楚。 KeyboardView 是视图还是视图控制器?在我看来,这是您添加为子视图的视图。您说“当调用此操作时,我 removeFromParent ...”这是否意味着在按钮操作中,您将视图从其父视图中删除?这个视图是 UIView 的自定义子类吗?在我看来,在您的视图按钮的 IBAction 中,您应该能够向拥有该视图的视图控制器发送消息。

标签: ios objective-c delegates protocols


【解决方案1】:

我不太确定你在这里做什么,但我想我理解你的问题。

在您的界面中,为键盘视图声明一个弱属性。

@property (weak, nonatomic) UIView *keyboardView;

然后当你加载键盘时

UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"KeyboardView" 
    owner:self options:nil] objectAtIndex:0];

[self.view addSubview:containerView];
self.keyboardView = containerView;

现在您可以测试self.keyboardView != nil 以了解键盘是否已加载。

这是可行的,因为keyboardView 很弱,所以当它从其父视图中删除时,该属性将设置为nil


注意:不需要协议或委托。

【讨论】:

  • Jeffery,我的主要问题是:在我的键盘中捕获数据输入后,我需要返回根视图控制器传递输入的数据。所以我需要关闭我的键盘并让根视图控制器中的特定方法知道收集的数据已准备好进行处理(在用户点击键盘中的 RETURN 小键盘后)。
  • 您应该使用UITextField 并将textField.inputView 设置为您的键盘视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
相关资源
最近更新 更多