IBOutlet UILabel在委托调用后未更新

max_jf5

截屏视频: https : //www.youtube.com/watch?v= ZwehDwITEyI

这真的很奇怪。问题在于标签出口位于定制设计的表格单元中。该单元格属于我的CustomCell类。(如果您观看了截屏视频,则实际上称为RA_FormCell)。

CustomCell.h

@property (weak, nonatomic) IBOutlet UILabel *dayOutlet;
-(void)controller:(id<CustomCellDelegate>)controller didUpdateDay:(NSString *)theDay;

CustomCell.m

// Method is called by a view controller
// (which is itself a delegate of the CustomCell class,
// hence the identifier you see below)

-(void)controller:(id<CustomCellDelegate>)controller didUpdateDay:(NSString *)theDay;
{
    NSLog(@"Method called") // confirms to me that method is called
    self.dayOutlet.text = @"Goodmorning";
    NSLog(@"%@", self.dayOutlet.text); // displays (null)
}

最终的日志实际上确实出现了,因此肯定会调用该方法。我打折了以下内容:

  1. self.dayOutlet.text 没有通过项目中的任何其他方法写入其他地方
  2. dayOutlet连接到情节提要中的标签(并且标签未连接到其他任何东西)
  3. 标签未隐藏在情节提要板上某些意外的静态标签下方
  4. 情节提要上的单元格属性包括其类别,例如 CustomCell
  5. Xcode中没有警告或警报(我一直小心避免任何循环导入)
max_jf5

问题在于该controller:didUpdateDay:消息未发送到正确的单元格类实例。

发生这种情况是因为我没有正确地将此单元分配为视图控制器的委托。对于任何有兴趣的人,在我的截屏视频(3:50)中,您都可以看到我的内容cellForRowAtIndexPath

RA_FormCell *cell = [tableView dequeueReusableCellWithIdentifier:self.formCellArray[indexPath.row] forIndexPath:indexPath];
self.delegate = cell

但是,这意味着self.delegate在生成表单元格时不断被覆盖。结果,我的controller:didUpdateDay消息被发送到表的底部单元格,而不是我需要的顶部单元格。

解决方案很简单-根本不需要第二个委托。相反,当单元委托给视图控制器时,它应该传递self给它委托的消息:

id<CustomCellDelegate> strongDelegate = self.delegate;

if ([strongDelegate respondsToSelector:@selector(customCell:didChangeDay1:)])
    [strongDelegate customCell:self didChangeDay1:[sender value]];

然后,在由委托执行此方法时,只需直接更改出口即可结束该方法:

-(void)customCell:(RA_FormCell *)customCell didChangeDay1:(double)value
    // put logic here
    customCell.dayOutlet.text = @"No problem!";

通常,很少需要双向代理结构。保持从A到的一种方式,B并只记得A传递self它发送给的任何消息B这样,B将知道消息来自的对象,并能够与之通信A

感谢Paulw11

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在委托方法中调用IBOutlet变量时收到错误

来自分类Dev

IBInspectable UIEdgeInsets未显示在IBOutlet中

来自分类Dev

抽奖中的AnimationView的IBOutlet未显示动画

来自分类Dev

调用initWithCoder后,IBOutlet为零

来自分类Dev

Swift中的Interface Builder,@ IBOutlet和委托和dataSource协议

来自分类Dev

从其他类调用更改时,UIView IBOutlet不变

来自分类Dev

为什么在Apple sdk中没有任何IBOutlet时,为什么必须向我的委托中添加IBOutlet标识符?

来自分类Dev

通过将UILabel子类化以在情节提要上使用,来提供标准文本颜色-(IBOutlet)

来自分类Dev

为什么在App Delegate中调用viewdidload时所有IBOutlet都为零?

来自分类Dev

如何解决在调用View Controller时IBOutlet配置和UI不显示的nil错误?

来自分类Dev

CursorLoader在notifyChange调用后未更新

来自分类Dev

$ http调用后角度视图未更新

来自分类Dev

方法调用后类变量未更新

来自分类Dev

函数调用后反应状态未更新

来自分类Dev

反应:AJAX调用后状态未更新

来自分类Dev

如何重写IBOutlet的getter

来自分类Dev

UIWebView IBOutlet连接问题

来自分类Dev

添加IBOutlet-XCode

来自分类Dev

Xcode IBOutlet链接错误

来自分类Dev

IBOutlet连接和继承

来自分类Dev

移动IBOutlet视图

来自分类Dev

UICollectionView,UICollectionCell和IBOutlet

来自分类Dev

IBOutlet nil - 按钮

来自分类Dev

Swift / UILabel子类上的操作,未调用委托方法

来自分类Dev

IBOutlet和IBOutlet属性之间有什么区别?

来自分类Dev

在扩展中定义IBOutlet属性

来自分类Dev

覆盖超类的IBOutlet属性?

来自分类Dev

在Swift中更改IBOutlet的位置

来自分类Dev

xib中的UITableViewCell作为IBOutlet?

Related 相关文章

热门标签

归档