2014-11-03 3 views
0

iOS 8 및 Xcode 6까지 Apple의 설정과 매우 유사한 UITableViewController를 사용하여 응용 프로그램을 구성 할 수있었습니다. 하나의 테이블에서 호출 테이블로 이어지는 segue'ing에서 호출 테이블을 다시로드하여 셀의 데이터를 업데이트하고 호출 행을 다시 선택한 다음 뷰를 애니메이션으로 표시하여 선택을 지우도록합니다. 셀 데이터가 업데이트되는 동안테이블 다시로드 및 셀 행 선택 지우기

[self.tableView reloadData]; 
[self.tableView selectRowAtIndexPath:lastselected animated:YES scrollPosition:UITableViewScrollPositionNone]; 
[super viewWillAppear:animated]; 

, 선택된 행의 좋은 느린 실종/셀이 발생하지 않습니다

여기 내가 사용했던 viewWillAppear 방법의 코드입니다. 그것은 즉시 효과적으로 삭제됩니다. 나는 내가 생각할 수있는 모든 것에 대해 노력해 왔지만이 일을 할 수는 없다. 제발 도와주세요 ...

변경된 사항과 그 멋진 전환을 어떻게 다시 얻을 수 있습니까?

감사합니다.

답변

0

viewWillAppear보기가 화면에 표시되기 전에 호출됩니다. 따라서 해당 메서드 내부에서 해고되면 올바르게 작동하는 애니메이션을 얻지 못합니다. viewDidAppear을 대신 사용하면 전환시 더 안정적인 애니메이션을 볼 수 있습니다. 너무 빨리 일어나는 경우 지연을 사용하여 performSelector을 잠재적으로 사용하십시오.

개인적으로도이 경우 [super viewDidAppear:animated];이라고 부릅니다. 다른 코드 줄 아래에있는 이유를 알 수 없습니다.

은 또한 단지 내가 100 % 명확되고있어 ... viewWillAppear가 분명히있는 tableView를 다시로드에 대한 확인이다 그래서이 작업을 수행 할 수 있습니다

...
-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.tableView reloadData]; 
} 


-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.tableView selectRowAtIndexPath:lastSelected animated:YES scrollPosition:UITableViewScrollPositionNone]; 
} 

또는 viewDidAppear에 수행 선택 지연

...

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self performSelector:@selector(animateCellSelectionAtIndexPath:) withObject:lastSelected afterDelay:0.2f]; 
} 

-(void)animateCellSelectionAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 
} 
+0

감사합니다. 당신이 계획 한대로 실제로 도움이되지는 않았지만 다음을 수행하여 작동시킬 수있었습니다. - (void) viewWillAppear : (BOOL) animated { [self.tableView reloadData]; [self.tableView selectRowAtIndexPath : lastselected animated : 예 scrollPosition : UITableViewScrollPositionNone]; [self performSelector : @selector (animateCellSelectionAtIndexPath :) withObject : lastselected afterDelay : 0.05f]; } - (무효) animateCellSelectionAtIndexPath (NSIndexPath *) indexPath {[self.tableView deselectRowAtIndexPath : indexPath 애니메이션 : YES]; } – SteveM

+0

주석 코드에서 'selectRowAtIndexPath' 호출을 두 번 수행하고 있습니다. 당신은 첫 번째'selectRowAtIndexPath'를 지연없이 perform selector의 것만 필요로하지 않아야한다. 내 viewDidAppear 버전이 작동하지 않는다면 매우 놀랄 것입니다. 비록이 경우에 지연이 당신에게 효과적 이었지만 행복합니다 ... 제가 말했듯이, 기술적으로는 불확정 한 양이라고 보장 할 수는 없습니다. 시간이 지나기 전에 나타났다. – Magoo

+0

좋은 catch .. 실제로는 deselectRowAtIndexPath이고 다른 select는 아닙니다. 복사/붙여 넣기 오류. – SteveM