2010-04-03 6 views
7

편집 할 수있는 항목의 목록을 설정하려고합니다. 메인 뷰가 있는데 UINavigationBar가 맨 위에 있고 UITableView가 바로 아래에 있습니다. "편집"버튼을 클릭하면 "완료"버튼으로 변경하고 싶지만 어떻게해야하는지 알 수 없습니다.UINavigationBar에서 UIBarButtonItem을 변경하는 방법

내가 인터페이스 빌더가 아닌 코드에서 할 수 있다면, 그냥 바꿀 수는 있지만 그렇게 할 수는 없습니다. [self.navigationItem]을 사용하여 일부 코드를 본 적이 있지만 내 경우에는 self가 UIView입니다.

내비게이션을 원하지 않을 때도 UINavigationBar를 사용하는 것이 조금 이상하지만 (제목은 한 페이지 임) 제목과 버튼이있는 툴바가 필요하므로 실제로 생각하지 않습니다. 선택의 여지가있다.

답변

15

편집에서 완료로 변경할 수있는 버튼 하나를 만듭니다. 더 많은 iPhone 개발 도서의 팁입니다.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem *editButton = self.editButtonItem; 
    [editButton setTarget:self]; 
    [editButton setAction:@selector(toggleEdit)]; 
    self.navigationItem.leftBarButtonItem = editButton; 
} 

그리고

- (IBAction)toggleEdit { 
    BOOL editing = !self.tableView.editing; 
    self.navigationItem.rightBarButtonItem.enabled = !editing; 
    if (editing) { 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone; 
} 
else{ 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStylePlain; 
} 
    [self.tableView setEditing:editing animated:YES]; 
} 

그런 다음 당신이 그들 중 하나를 교체 할 필요가 없습니다 toggleEdit 방법.

+0

아, 그래, 좋아 보인다 시도 할 수 있습니다. 그래도 버튼이 약간 다른 색상 인 곳에서 좋은 "완료"스타일을 얻지는 않는다고 생각합니다. –

+0

스타일이 변경되면이 코드의 DONE 버튼이 UIBarButtonSystemItemDone과 정확히 같습니다. – wal

0

알 수 있습니다. TopItem 속성을 사용하여 UINavigationItem에 접근 할 수있는 것처럼 보입니다. 항상 그렇듯이 문서를 읽어야했습니다.

4

self.editButtonItem을 사용하면 단추의 스타일과 텍스트를 변경할 필요가 없으며 자동으로 수행됩니다. 해당 코드를 제거해도 여전히 작동합니다.

2

IB에서 nav 버튼을 IB로 설정하고 editOutlet이라는 콘센트를 만들고 헤더 파일에 editToggle이라는 액션을 작성하면 매우 쉽습니다. 이 :

-(IBAction) editToggle:(id) sender { 

if (self.tableViewOutlet.isEditing == NO) { 

    self.editOutlet.title = NSLocalizedString(@"Done", @"Done"); 
    self.editOutlet.style = UIBarButtonItemStyleDone; 
    [self.tableViewOutlet setEditing:YES animated:YES]; 

}else { 
    self.editOutlet.title = NSLocalizedString(@"Edit", @"Edit"); 
    self.editOutlet.style = UIBarButtonItemStylePlain; 
    [self.tableViewOutlet setEditing:NO animated:YES]; 

    } 
} 
0

당신은

[self setValue:viewController.navigationItem forKey:@"_navigationItem"]; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
관련 문제