UILabel
의 값을 변경하려고합니다.uitableviewcell 하위 클래스의 공용 변수에 액세스
값을 변경하려는 값은 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");
}];
}];
}
}
을하지만, 난 아마 새로운 insance로 TimelineViewController
을 초기화하고 있습니다 때문에, 모든 초기 값은 전무하다 if/else
내부의 코드 블록 그래서 성명은 결코 실행되지 않습니다.
TimelineViewController
의 새 인스턴스를 만들지 않고 공개 값에 액세스하려면 어떻게해야합니까?
정말 좋은 생각입니다. 셀에는 뷰 컨트롤러에 대한 지식이 없어야합니다. 셀 클래스는 프로토콜을 정의하고 대리인 속성을 가져야합니다. 그런 다음보기 컨트롤러가 셀의 대리자가 될 수 있습니다. 그런 다음 셀은 대리인에게 필요할 때 업데이트 된 값을 제공하도록 요청할 수 있습니다. 이렇게하면 데이터를 가져 오는 위치에 대한 구체적인 지식 없이도 셀이 작동 할 수 있습니다. – rmaddy
@rmaddy는 합법적 인 것처럼 보이지만 동일한 작업을 수행하는 데 더 많은 작업이 필요합니다. 이런 식으로 할 때 나는 어떤 악을 할까? – bdv
커플 링이 너무 많습니다. 셀에 특정보기 컨트롤러에 대한 지식이 너무 많이 필요하며 데이터가 어떻게 설정되는지는 더 심합니다. 두 번째보기 컨트롤러에서 동일한 종류의 표 셀이 필요하면 어떻게됩니까? 물론, 셀이 특정 뷰 컨트롤러의 데이터에 직접 액세스하는 것이 쉽고 빠르지 만 장기적으로 후회할 것입니다. 코드가 변경되면 나중에 더 많은 작업이 필요합니다. 또한 MVC 디자인에 위배됩니다. – rmaddy