【问题标题】:View changes not being reflected when made change is made inside delegate method在委托方法中进行更改时未反映视图更改
【发布时间】:2014-02-17 11:34:47
【问题描述】:

我有一个班级 A 有代表。代表正在另一个类B 中实现。

B 中,我有一个文本字段,我试图在调用委托时将其隐藏。

- (void) didRecieveResponseDelegate : (BOOL) status{
      textField.hidden = YES;
} 

但是 textField 并没有被隐藏。我注意到委托内部没有任何与视图相关的更改起作用,包括删除子视图控制器。有什么问题,我该如何解决?

编辑:B 是另一个视图控制器的子视图控制器

【问题讨论】:

  • 你添加了a.delegate = self;在B级?您可以将日志添加到 didRecieveResponseDelegate: 以确保调用此方法吗?
  • 您是否检查过是否调用了 didrecieveResponseDelegate 方法
  • 是的,我已经确保调用了委托。所有日志都在委托内工作。但我无法删除任何视图或更改元素的可见性
  • 显示您设置委托的代码。您实际上是否在使用 B 类的 2 个不同实例?
  • 是在主线程还是后台线程调用了didRecieveResponseDelegate?

标签: ios objective-c


【解决方案1】:

试试这个,

- (void) didRecieveResponseDelegate : (BOOL) status{

     dispatch_async(dispatch_get_main_queue(), ^{
             textField.hidden = YES;
     });
}

【讨论】:

    【解决方案2】:
    1. 是否调用了该方法? (断点或 NSLog 来证明)。
    2. 为什么要使用带前导下划线的实例变量?这会导致错误和混乱以及对您的代码的不信任。
    3. textField 是实际设置还是为零? NSLog 来证明。
    4. 修复方法名称中的拼写错误。很可能调用了 didReceiveResponseDelegate 而不是 didRecieveResponseDelegate。
    5. 确保不要从后台线程进行 UI 调用。

    【讨论】:

    • 你所说的一切都是检查并且很好。这里唯一需要注意的是 B 是另一个控制器的子视图控制器,如果有帮助的话
    猜你喜欢
    • 2016-09-26
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多