2009-07-01 4 views
24

왼쪽 상단에 일반 편집/완료 버튼을 생산아이폰, 테이블보기에서 편집/완료 버튼 클릭에 대한 후크 내 테이블 뷰 컨트롤러에서

self.navigationItem.leftBarButtonItem = self.editButtonItem; 

있다. 따라서 사용자가 "편집"을 클릭하면 버튼 캡션이 "완료"로 변경되고 테이블 항목이 삭제되거나 재정렬됩니다. 사용자가 실제로 "완료"를 클릭하면 알림을 받고 싶습니다. 그거 갈고리가 있니?

배경 : 항목의 순서를 유지하고 싶습니다. 즉 다음에 사용자가이보기를 클릭하면 가장 최근에 사용하지 않은 순서로 항목을 표시하고 싶습니다.

답변

43

(또는 답변 : P)

UITableView API

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 메서드 입니다.이 메서드는이 편집/완료 버튼을 누를 때마다 호출됩니다. 그 중 하나가 사용 된 매개 변수 인 (BOOL)editing으로 간단하게 확인해야합니다. 마지막으로, 원래 편집/완료 버튼에서 적절한 메소드를 호출해야합니다.

단순히 jQuery과 클래스

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 
{ 
    [super setEditing:editing animated:animate]; 
    if(editing) 
    { 
     NSLog(@"editMode on"); 
    } 
    else 
    { 
     NSLog(@"Done leave editmode"); 
    } 
} 
+0

프로그래밍 방식으로 뷰를 배치하면 setEditing : animated()도 호출됩니다. 편집 모드. 필자는 편집 모드를 외부 적으로 설정하는 데 사용할 수있는 [super setEditing]을 호출하는 추가 메서드를 추가했습니다. – Symmetric

+0

참고 : 'UITableView' ** 델리게이트 **로 UIViewController를 통해 이것을 수행하는 경우,'UITableView'에 ** 테이블의 ** 편집 상태를'[self.tableView setEditing : 애니메이션 편집 : 애니메이션]. – cloudrave

2

바 버튼 푸시 된 경우는 표준 방법 통지받을 수 있나요 : 아직이 질문에 interesed 사람들을 위해

self.editButtonItem.target = self; 
self.editButtonItem.action = @selector(buttonPushed:); 

... 

- (void) buttonPushed:(id)sender 
{ 
// do stuff here 
} 
+0

음, 저도 압니다. 중요한 점은 버튼이 이미 수행 한 작업 (목록 항목 수정, 캡션 전환 등)을 방해하고 싶지 않다는 것입니다. 나는 단순히 그것이 "완료"상태에서 클릭되었을 때를 알고 싶다. –

+1

UIBarButtonItems는 UIControl에서 파생되지 않으므로 다른 대상을 추가 할 수 없습니다. 언제든지 작업을 포착하고 상태를 스스로 유지할 수 있습니다. 그리 어렵지 않습니다. 그렇지 않으면 buttonPushed 호출 (위)을 가져온 다음 '무시'플래그를 설정하고 돌아서 한 번만 이벤트를 합성하여 버튼에서 처리합니다. 터치 이벤트 합성에 대한 자세한 내용은 다음을 참조하십시오. http://cocoawithlove.com/2008/10/synthesizing-touch-event-on-iphone.html – Ramin

0

작업을 변경할 수 있습니다에이 방법을 추가 할 수 있습니다. 편집 버튼 클릭 후 삭제 버튼을 보여 주며, 거부/확인/수정 버튼을 보여줄 수 있습니다. 그리고 여기 내가 사용하는 간단하고 깨끗한 솔루션이다, 삭제 옵션 대신

감사 Mindus jQuery과를 무시하고 싶지 않은 사람들을 위해

3

(예를 들어, 당신이있는 UITableViewController를 사용하는 경우)에 대응 조치를 변경합니다. 기본적으로 자신의 편집 버튼 항목을 만들고 tableView의 editing 플래그를 사용하여 편집 대 완료를 추적합니다. 케이크 위에 장식하기 위해 테이블에 새 항목을 추가하기 위해 비어있는 경우 "편집"대신 "+"버튼이 표시됩니다.

- (void) updateEditButtonVisibility 
{ 
    // tableItems represents the data structure that s 
    if ([tableItems count] > 0) 
    { 
     UIBarButtonSystemItem editButtonType = self.tableView.editing ? UIBarButtonSystemItemDone : UIBarButtonSystemItemEdit; 
     UIBarButtonItem *editButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:editButtonType 
                         target:self 
                         action:@selector(editButtonTouched)]; 

     self.navigationItem.rightBarButtonItem = editButtonItem; 
     [editButtonItem release]; 
    } 
    else 
    { 
     UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                         target:self 
                         action:@selector(addButtonTouched)]; 
     self.navigationItem.rightBarButtonItem = addButtonItem; 
     [addButtonItem release]; 
    } 
} 

- (void) editButtonTouched 
{ 
    // edit/done button has been touched 

    [self.tableView setEditing:!self.tableView.editing animated:YES]; 
    [self updateEditButtonVisibility]; 
} 

- (void) addButtonTouched 
{ 
    // logic to allow user to add new items goes here 
} 

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

    [self updateEditButtonVisibility]; 
} 
관련 문제