2011-08-30 19 views
19

現在、テーブルセルタッチの読み込み中のサブビューのバックボタンテキストを変更しようとしています。しかし、私はそれを実装しようとしている方法でも、それはまだバックボタンの親のタイトルを示しています。uinavigationbar戻るボタンテキストを変更する方法

私はそのが動作していないしかしそう

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

などのviewDidLoadメソッド内のバックボタンに新しい値をロードしようとしています。

+0

これはメインスレッドで実行されていますか? –

+0

正直言ってわかりませんが、私はイオスのスレッドについてはわかりません。私が知っているスレッドを作成していないので、あなたの質問に答えることができます。 –

+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を設定し、それがバックボタンを非表示になります。セレクタhandleBackはバックイベントを処理するようになり、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はViewのタイトルです –

-3

これを行うには良い方法は、このような子供を呼び出す前に、親ビューコントローラ内の戻るボタンのタイトルを設定することです:

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

このタイトルは子供に戻るボタンに配置されますビュー。ここで重要な点は、このタイトルが子ビューで親ビューの戻るボタンとして使用されていることです。

+0

あなたの説明によれば、[self.navigationItem setTitle:@ "..."]、または単に 'self.title = @ "..." '? –

+1

デフォルトのself.navigationItem.backBarButtonItemはnilなので、これを使って戻るボタンの儀式を変更することはできません。 – Peter

2

Xcode 5で戻るボタン名を変更する最も良い方法は、戻るボタンが戻るView ControllerのナビゲーションアイテムのIBのBack Buttonフィールドを編集することです。たとえば、詳細画面に移動するリストTableViewControllerがある場合、詳細画面が表示する戻るボタン名を変更するには、TableViewControllerのナビゲーション項目(IB内のリスト)の戻るボタンを変更します。

+0

これはあなたがやりたいことです。おかげでPeter。 – 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 
関連する問題