2012-01-20 6 views
0

내 프로젝트에는 몇 개의보기 컨트롤러가 있습니다. A와 B를 가정 해 봅시다. A에서 UITableView가 있습니다. 행이 선택되면 행 번호와 셀 텍스트를 B로 이동 한 다음 B를 보냅니다. 그리고 나서 B를 보겠습니다.TableView 데이터를 다시로드 할 수있는 적절한 위치는 어디입니까?

보기 B에서 '완료'버튼을 누르면 기본 데이터 (현재는 싱글 톤 배열) 다음 A보기로 다시 팝업 뷰 A viewDidAppear, 새 데이터를 볼 수있는 UITableView 다시로드합니다.

이렇게하는 것이 가장 좋은 방법입니까? 또는 '완료'버튼을 눌렀을 때 UITableView를 다시로드해야합니까? 그렇다면 뷰 B에서 뷰 A의 테이블을 어떻게 다시로드합니까?

감사합니다.

+0

'reloadData'는 UX 관점에서 보면 정말 나쁩니다. insertRowsAtIndexPaths : withRowAnimation :, deleteRowsAtIndexPaths : withRowAnimation : 등을 사용하여 스크롤 위치 및 선택 문제를 방지합니다. –

답변

2

"완료"버튼을 누르면 데이터를 직접 다시로드하는 것이 좋습니다. 알림 센터에서이 작업을 수행 할 수 있습니다. 알림 센터에 대한 자세한 내용은 link을 확인하십시오.

+0

완벽하게 일했습니다! 후속 조치 : '통지 삭제'는 어디에서해야합니까? 기본보기에서 viewDidUnload 가정합니까? – wayneh

+0

이론 상으로는 더이상 듣지 않아도 될 때 제거해야합니다. 따라서 필요에 따라 다르지만 일반적으로 앱이 실행되는 동안 청취가 필요하므로 앱 (또는 특정보기)이 종료 될 때 제거해야합니다. 하나의 선택은'viewDidUnload'이고 다른 것은'dealloc' 일 수 있습니다. 이것은 제거가 언제 일어나길 원하는지에 달려 있습니다. – antf

+0

우수 - 다시 한 번 감사드립니다! – wayneh

0

ViewController "A"는 확실히 테이블 데이터를 다시로드 할 책임이 있습니다. 나는 그것을 ViewController A의 "viewWillAppear"메소드에 넣는 것을 고려할 것입니다. 그런 식으로 테이블이 표시되고 "깜박임"되기 전에 다시로드됩니다.

0

viewDidAppear이 호출 될 때마다 테이블이 다시로드된다는 점을 제외하고는 아무런 문제가 없습니다. 이는 테이블의 크기에 따라 그리 좋지 않을 수 있습니다. 가장 좋은 방법은 @protocol을 사용하고 빠른 위임 디자인 패턴을 만드는 것입니다. 익숙하지 않은 경우 불필요한 두통이 될 수도 있습니다. NSNotifications을 사용할 수도 있지만,이 경우 이벤트를 듣는 관측자가 많지 않으므로 사용하지 않으려 고합니다.

0

대신 NSNotification을 사용하십시오. 뷰 A를 훨씬 깨끗한 디자인 패턴 인 뷰 B의 대리자로 지정할 수 있습니다. 당신은 수정을 완료하면

그래서보기 A를에 유 updateTable에서

[delegate updateTable]; 

대리자 선언에 @Required 방법 전화

ViewB *b = [[ViewB alloc] init]; 
b.delegate = self; 

및 viewB에서 같을 것이다 그리고 그 위임에 부합한다고 말하면 그것의 필요한 viewA는 그것을 구현할 필요가 있기 때문에.

또한이 메서드는 뷰 B를 팝하기 전에 호출됩니다.

+0

나는 이것을 시도하지 않았지만 그것도 꽤 간단한 해결책 인 것 같습니다 - 감사합니다. – wayneh

관련 문제