Ios 访问uitableviewcell子类中的公共变量
我想在有人点击时更改Ios 访问uitableviewcell子类中的公共变量,ios,objective-c,Ios,Objective C,我想在有人点击时更改UILabel的值 我要将其更改为的值在ViewController本身中定义 现在,我正在使用以下代码: - (void)tapOnBalance { TimelineViewController *timelineVC = [[TimelineViewController alloc]init]; if(timelineVC.oldBalance && timelineVC.newBalance){ NSTimeInterval duratio
UILabel
的值
我要将其更改为的值在ViewController
本身中定义
现在,我正在使用以下代码:
- (void)tapOnBalance {
TimelineViewController *timelineVC = [[TimelineViewController alloc]init];
if(timelineVC.oldBalance && timelineVC.newBalance){
NSTimeInterval duration = 0.5f;
[UIView transitionWithView:self.amountLabel
duration:duration
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.amountLabel.text = timelineVC.newBalance;
} completion:^(BOOL finished){
[UIView animateWithDuration:duration delay:duration options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
self.amountLabel.text = timelineVC.oldBalance;
} completion:^(BOOL finished){
NSLog(@"finished");
}];
}];
}
}
但是,因为我可能正在将TimelineViewController
初始化为一个新的INSACE,所以所有的初始值都是零,因此if/else
语句中的代码块永远不会运行
如何访问这些公共值而不创建
TimelineViewController
的新实例?没错,每次调用tapOnBalance
时,都会创建TimelineViewController
的新实例
我不确定您的体系结构是什么样的,但我想到的解决方案是在实现tapOnBalance
的视图控制器内部为TimelineViewController
创建一个属性:
@property (nonatomic, strong) TimelineViewController *timelineVC;
在文件头或专用接口中。
然后在
viewDidLoad
中初始化一次,并使用self.timelineVC
访问它,这真是个坏主意。单元格不应了解任何视图控制器。您的单元类应该定义一个协议并具有委托属性。然后,视图控制器可以是单元格的委托。然后,单元格可以要求其委托在需要时提供更新的值。这使您的单元格可以在不知道数据从何处获取的情况下工作。@rmaddy似乎是合法的,但同样的任务需要做更多的工作。当我这样做的时候,会造成什么样的恶果呢?这太耦合了。您的计算单元需要太多关于特定视图控制器的知识,更糟糕的是,它的数据是如何设置的。如果在第二视图控制器中需要相同类型的表格单元,会发生什么情况?当然,现在让计算单元直接从特定的视图控制器访问数据既快又容易,但从长远来看,你会后悔的。随着情况的变化,您的代码稍后将需要更多的工作。另外,它完全违背了好的MVC设计。在TimelineViewController初始化后,它不会更新newBalance和oldBalance在哪里以及如何设置它们?