2011-08-30 5 views
19

현재 테이블 셀 터치를로드 한 하위보기의 뒤로 단추 텍스트를 변경하려고합니다. 그러나 그것을 구현하려고하는 방식으로조차도 뒤로 버튼에 부모 제목을 표시합니다. uinavigationbar back 단추 텍스트를 변경하는 방법

나는 그 작동하지 않습니다하지만 그렇게

UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] init]; 
myBarButtonItem.title = @"Back"; 
self.navigationItem.backBarButtonItem = myBarButtonItem; 
[myBarButtonItem release]; 

처럼의 viewDidLoad 방법 내부의 뒤로 가기 버튼에 새 값을로드하려합니다.

+0

주 스레드에서 수행 중이십니까? –

+0

솔직히 말해서 나는 확신 할 수 없다. ios의 쓰레드에 대해 확신하지 못한다. 나는 당신이 질문에 대답하는 데 도움이된다면, 내 지식에 쓰레드를 만들지 않을 것이다. –

+1

중복 된 질문. 이 답변보기 : http://stackoverflow.com/a/4291832/1627732 – Yoga

답변

0

코드가 지금까지 괜찮아 보입니다.

이 코드는

[super viewDidLoad]; 

문 (잘못된) 전에 실행이나 뒤에 (좋은)인가?

+0

나는 그것을 실행하고 있었다. –

1

당신이하려는 방식대로 작동하지 않습니다. 탐색 버튼에는 항상 이전보기의 제목이 있습니다. 당신이 할 수있는 일 - 새 뷰를 만들기 전에 첫 번째 뷰의 제목을 변경하십시오. 이것은 내가 같은 문제를 해결할 수있는 유일한 방법이다.

+1

그리고 다시 당신이 당신의 타이틀을 되돌려 놓아야 할 때 ..이 유일한 가능성은 .. 손가락이 교차하는 또 다른 방법이 있다면 이것은 끔찍한 해결책입니다. –

9

알았어,이 코드를 부모보기 tableView : didSelectRowAtIndexPath : 메서드에 게시했습니다. 이것은 사용자가 선택할 수있는 여러 개의 표 셀을 사용하는 모습입니다. 희망이 도움이됩니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Navigation logic may go here. Create and push another view controller. 
    if (indexPath.section == 0) { //--- picks (first) section 

    ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; 
    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:childViewController animated:YES]; 
    //--- this sets the back button to "Back" every time you load the child view. 
    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil] autorelease]; 

     if(indexPath.row == 0) { //--- picks row 
      childViewController.title = @"Bike"; 
     } 
     if(indexPath.row == 1) { 
      childViewController.title = @"Model"; 
     } 
     [vehicleSearchResponseTableViewController release]; 
    } 


} 
+0

스택에 하나 이상의보기 컨트롤러가있는 경우 이것이 실제로 작동하는 유일한 솔루션입니다. 감사. – Winston

-1

This article은 원하는대로해야합니다. 저자에서

: 위에서 볼 수 있듯이

은, 당신이해야 할 모든 컨트롤러의 leftBarButtonItem을 설정하며 뒤로 버튼을 숨 깁니다. selector handleBack은 이제 back 이벤트를 처리하므로 수동으로 UINavigationController의 스택에서 뷰 컨트롤러를 팝해야합니다. 페이지를 떠나는 것을 막을지라도 코드를 구현할 수 있습니다.

30

self.navigationItem.backBarButtonItem을 이전보기 (현재보기가 아님)로 변경해야합니다 (조금 비논리적 임). 예를 들어, 테이블보기에서 다음과 같은 작업을 수행 할 수 있습니다

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self setTitle:@"My title"]; 
    UIBarButtonItem *boton = [[UIBarButtonItem alloc] initWithTitle:@"Custom back button text" style:UIBarButtonItemStyleBordered target:self action:@selector(mySelector:)]; 
    self.navigationItem.backBarButtonItem = boton; 
    [boton release]; 
} 
+0

그가 스페인어로 쓰지 않았다면) – Steven07

24

읽고 다시 읽고 각각의 설정으로 놀러 때까지 문서는 분명하지 않다 곳입니다. 다음 @"" 빈 문자열 값을 설정 -
는 버튼이 보이지하려면 뒤로 버튼은 viewDidLoad()

self.navigationController.navigationBar.topItem.title = @"Your Label"; 

이 줄을 추가 기본의 제목을 변경합니다.

+2

이것은 이와 같은 해킹이지만, 다시 돌아 가면 이전 펜촉의 제목을 다시 설정하면 작동합니다. –

+0

Downvoted. 다른 옵션을 고려할 때 이는 실행 가능한 솔루션으로 간주되어서는 안됩니다. 우리가 뒷쪽 단추의 동작 방식을 제어 할 수없는 상태에 직면했다면이 문제는 받아 들일 수있는 해킹이 될 것이지만 여전히 해킹 될 것입니다. –

+0

TopItem이 항상 BackButton이 아니기 때문에 TopItem이 제목을 표시했습니다. –

-3

이 작업을 수행하는 좋은 방법은이 같은 아이를 호출하기 전에 부모 뷰 컨트롤러의 뒤로 버튼의 제목을 설정하는 것입니다 :

[self.navigationItem.backBarButtonItem setTitle:@"Your Custom Title"]; 

이 제목이 아이의 뒤로 가기 (back) 버튼에 배치됩니다 전망. 여기서 중요한 점은이 제목이 하위보기에서 상위보기의 뒤로 단추로 사용된다는 것입니다.

+0

설명에 따르면 [self.navigationItem setTitle : @ "..."] 또는 'self.title = @ "..." '? –

+1

기본 self.navigationItem.backBarButtonItem이 nil이므로이 버튼을 사용하여 뒤로 버튼 라이트를 변경할 수 없습니다. – Peter

2

Xcode 5에서 뒤로 버튼 이름을 변경하는 가장 좋은 방법은 뒤로 버튼이 돌아올 View Controller의 탐색 항목에있는 IB의 뒤로 버튼 필드를 편집하는 것입니다. 예를 들어, 세부 화면으로 이동하는 TableViewController 목록이있는 경우 세부 화면에 표시되는 뒤로 단추 이름을 변경하려면 TableViewController의 Navigation 항목 (IB에서)의 뒤로 단추를 변경하십시오.

+0

이것이 원하는 방식입니다. 감사합니다 피터. – JVillella

0

의 viewDidLoad

self.navigationController! 후 .navigationBar.backItem? .title = "뒤로"

0

나의 제안은 부모 페이지 제목 표시 줄에 별도의 라벨을 추가했다. 나를 위해 잘 된.

let titleLabel = UILabel(frame: CGRect(x: (view.frame.width * (3/8)), y: 0, width: (view.frame.width * 0.25), height:30)) 
     titleLabel.text = "Title" 
     titleLabel.textAlignment = .center 
     titleLabel.textColor = UIColor.white 
     titleLabel.font = UIFont.systemFont(ofSize: 20) 
     navigationItem.titleView = titleLabel 
관련 문제