【问题标题】:iOS Custom View's methods not called未调用 iOS 自定义视图的方法
【发布时间】:2015-09-29 15:13:22
【问题描述】:

我有一个视图控制器 CaptureDataVC 和一个自定义视图 KeyboardView

KeyboardView 具有根据需要工作所需的所有初始化函数:
-(id)initWithCoder:(NSCoder *)aDecoder-(id)initWithFrame:(CGRect)frame

CaptureDataVC 的 xib 文件中,我有一个带有自定义类 KeyboardViewUIView

视图渲染得很好。问题是我无法调用KeyboardView 中的任何方法(它可以编译,我没有收到任何错误,但没有调用这些方法)。

所以基本上我不能这样做:

CaptureDataVC.h

@property (nonatomic,retain) IBOutlet KeyboardView  *keyboardView;

CaptureDataVC.m

[self.keyboardView foo];

KeyboardView.m

-(void) foo {
    NSLog(@"Hello World!"); //Won't print anyting
}

有什么想法吗?

编辑:

自定义类设置为蓝色视图

【问题讨论】:

  • 当您的 KeyboardView 被选中并且 Identity Inspector 处于打开状态时,您能否发布 xib 文件的屏幕截图?班级是否说KeyboardView
  • @HAS 如您所见...
  • 我们用 strong 来表示“嘿,当我还活着的时候会发生什么”,而用 weak 来表示“嘿,当你还活着的时候,我会抓住你,但如果你死得很好,那没关系,我''ll let you go"。因此,当视图处于活动状态时,您的键盘视图处于活动状态。
  • IBOutlet 的keyboardView 是nil 吗?尽管这里提到了其他一切,但它仍然可能是。对于上述 cmets,您应该使用弱(而不是隐含的强),因为视图由其父视图保留。视图通过视图层次结构拥有,而不是由它们的控制器拥有。
  • 您是否添加了任何断点来遵循代码流?这就是keyboardView 在任何时候是否为nil

标签: ios objective-c


【解决方案1】:

嗯,第一个问题是:

  1. [self.keyboardView foo]; 线路是否运行?在那里放置一个断点。
  2. 如果是,self.keyboardView 不为零吗?当调试器在上一个断点处停止时,在调试器中输入po self.keyboardView 进行检查。

一个典型的错误是假设self.someView 总是被设置。实际上它不会,在视图和插座被加载之前。请参阅viewDidLoadisViewLoaded 的文档。

【讨论】:

  • 试图从 CaptureDataVC 的 init mehtod 中调用这些方法...刚刚将它们移到 viewDidLoad 和瞧...
  • 应该将此答案标记为已解决,看起来解决方案就在这里
  • 谢谢!乐于助人!
【解决方案2】:

请检查KeyboardView的outlet属性是否设置:如果属性为nil,什么都不会发生

【讨论】:

    【解决方案3】:

    不需要手动初始化自定义视图,因为它已添加到视图控制器中。您所要做的只是检查您在哪里调用了自定义视图方法。它应该在您的视图加载后调用。即 viewDidLoad 或 viewWillAppear 方法。

    【讨论】:

      【解决方案4】:

      CaptureDataVC.m 中,您必须将内存分配给对象:

      self.keyboardView=[[KeyboardView alloc]init];
      

      并将您的方法称为:

      [self.keyboardView foo];
      

      它会起作用的。

      【讨论】:

      • 感谢您的回答,但我做错的是我试图在加载之前访问视图(在 init 方法中)。只需将我的代码移动到 viewDidLoad 方法中
      • 很高兴听到! :) 完美
      【解决方案5】:

      您可以使用代理实现您想要的结果。在您的视图控制器中实现键盘视图的代理。

      【讨论】:

        猜你喜欢
        • 2015-04-10
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-16
        • 1970-01-01
        • 2015-10-03
        • 2021-12-28
        相关资源
        最近更新 更多