2011-08-29 4 views
0

내 견과류를 몰아 치기는하지만 정말 간단합니다. 나는 편집 모드 안팎으로 전환을 움직이게하려고하는 uitableview를 가지고있다. 이것이 내가 본 모범에서 나온 것입니다. 그것은 일을하지만 애니메이션은하지 않습니다.uitableview를 편집 할 때 애니메이션 문제가 발생합니다.

의견이 있으십니까?

- (IBAction) EditTable:(id)sender 
{ 

if(self.editing) 
{ 
    [super setEditing:NO animated:YES]; 
    [tblSimpleTable setEditing:NO animated:YES]; 
    [tblSimpleTable reloadData]; 
    [self.navigationItem.leftBarButtonItem setTitle:@"Edit"]; 
    [self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
} 
else 
{ 
    [super setEditing:YES animated:YES]; 
    [tblSimpleTable setEditing:YES animated:YES]; 
    [tblSimpleTable reloadData]; 
    [self.navigationItem.leftBarButtonItem setTitle:@"Done"]; 
    [self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
} 

} 

추신 : 왜이 ​​줄이 필요한지 잘 모르겠습니다. [super setEditing : NO animated : YES]; 하지만 모든 일은 그저 그걸하지 않고는 전혀 작동하지 않는 것 같습니다. 나는 온라인으로 몇 가지 예를 보았다.

감사합니다.

답변

4

아마도 편집 속성을 설정할 때 데이터를 다시로드하면 안됩니다.

현재 "슈퍼"수업은 무엇입니까? 일반적으로 [super setEditing : YES animated : YES]를 호출 할 필요가 없습니다.

+0

신비하게도 그렇게했습니다 ... 왜 [super setEditing : YES animated : YES]가 필요한지 잘 모릅니다. – TommyG

+0

클래스에 대한 더 많은 코드를 게시하면 수퍼 클래스의 메소드를 호출해야하는 이유를 찾을 수 있도록 도와줍니다. 어쩌면 여기서 또 다른 질문을 시작하는 것이 좋을 것입니다. – xuzhe

+0

방금 ​​Swift에서 내 테이블 뷰를 사용하여 비슷한 문제가 발생했으며 tableView.beginUpdates 및 endUpdates 뒤의 setEditing 함수 끝에 reloadData를 제거하면 저 또한 효과적이었습니다. 감사합니다 :) – DenverCoder9

0

올바르게 애니메이션을 적용하지 않는 버튼입니까? 어쨌든 당신은 아마 자신의 super.editButtonItem을 사용해야 할 것입니다; 애니메이션이고 단지 텍스트와 스타일을 설정하는 것입니다 (저는 믿습니다). 슈퍼를 호출하는 한 편집 방법 중 하나를 무시하고 거기에서 슈퍼 메서드를 호출하지 않습니까? 그리고 reloadData에 대한 xuzhes의 대답은 정확하다고 생각합니다.

+0

"편집"또는 "완료"를 클릭하면 애니메이트가 모든 셀의 오른쪽과 왼쪽으로 이동하지 않습니다. 지금은 작동하지만 슈퍼 콜을 제거 할 때 왜 작동하지 않는지는 알 수 없습니다. 어떤 아이디어? – TommyG

0

이 시도 :

@implementation YourViewController가 //이 될 (한다) 할 수있는 UITableViewController의 서브 클래스를 여러분의 인생을 더 쉽게

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.rightBarButtonItem = self.editButtonItem; // Automatically calls setEditing:animated: and changes itself to "Edit"/"Done" between presses 
} 

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    if (editing == YES) { 
     // Do stuff here 
    } else { 
     // Do stuff here 
    } 

    // Reload all sections of the table view 
    // THIS IS THE PART YOU'RE INTERESTED IN 
    NSRange range = NSMakeRange(0,[self.tableView numberOfSections]); 
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; 
    [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic]; 
} 

체크 아웃 애플의 방법에 대한 의견에 대한 문서를 만들기 위해 :)

관련 문제