سؤال

حاليا اليسار زر شريط القيمة الافتراضية هي العنوان ترى أن تحميل النظام الحالي ، وبعبارة أخرى بالنظر إلى أن تظهر عند الضغط على الزر (زر العودة).

أريد تغيير النص الذي يظهر على الزر إلى شيء آخر.

حاولت وضع السطر التالي من التعليمات البرمجية في عرض المراقب المالي viewDidLoad ولكن لا يبدو أن العمل.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

ماذا يجب أن أفعل ؟

شكرا

هل كانت مفيدة؟

المحلول

يجب وضع ذلك في الطريقة التي تستدعي ViewController بعنوان "Newtitle". مباشرة قبل بيان الضغط أو PopViewController.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

نصائح أخرى

في childvc هذا عملت بالنسبة لي ...

self.navigationController.navigationBar.topItem.title = @"Back";

يعمل في سويفت أيضا!

self.navigationController!.navigationBar.topItem!.title = "Back"

هنا هو الوثائق ل backbarbuttonitem.:

"عندما يكون عنصر التنقل هذا مباشرة من العنصر العلوي على الفور في المكدس، تستمد وحدة تحكم التنقل الزر الخلفي لبار التنقل من عنصر التنقل هذا. [...] إذا كنت ترغب في تحديد صورة مخصصة أو عنوانا للزر ، يمكنك تعيين عنصر زر شريط مخصص (مع العنوان أو الصورة المخصصة الخاصة بك) إلى هذه الخاصية بدلا من ذلك. "

عرض وحدة تحكم أ (ال "الأبوين" عرض وحدة تحكم):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

عند أي وحدة تحكم أخرى ب هو أعلى كومة التنقل، و أ هو الصحيح أدناه، بسيتم الحصول على زر الظهر العنوان "قصيرة".

في Xcode 4.5 باستخدام القصة المصورة، إلى حد بعيد أسهل حلا وجدته عندما لا يتعين على قيمة الزر الخلفي أن تتغير ديناميكيا هو استخدام حقل "الزر الخلفي" المرتبط بند التنقل الخاص بوحدة تحكم العرض إليه تريد زر "الظهر" ليقول شيئا آخر.

على سبيل المثال في لقطة الشاشة أدناه، أريد الزر الخلفي لوحدة تحكم العرض (S) التي يمكنني دفعها "مرة أخرى" كعنوان الزر الخلفي.

enter image description here

بالطبع، هذا لن يعمل إذا كنت بحاجة إلى الزر الخلفي لأقول شيئا مختلفا قليلا في كل مرة ... هناك كل الحلول الأخرى هنا لذلك.

أعلم أن السؤال قديم جدا، لكنني وجدت حل لطيف.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

يعمل من الطفل! اختبار مع iOS 7.

ربما أكون أكثر تبسيطا ولكن من وثائق أبل الصياغة هي:

اذا كان العادة لم يتم تحديد عنصر زر شريط من قبل أي من وحدات تحكم العرض، زر العودة الافتراضي يستخدم وعنوانه تم تعيينه على قيمة خاصية عنوان وحدة التحكم في العرض السابقة، وهذا هو، وحدة التحكم عرض مستوى واحد أسفل على المكدس.

الحل الذي تم وضع علامة عليه الصحيح أعلاه يعين عنصر زر افتراضي من وحدة التحكم الأصل. إنها الإجابة الصحيحة، لكنني أحاول حل المشكلة عن طريق تغيير self.title خاصية UiviewController مباشرة قبل دفع وحدة التحكم الجديدة على مكدس NavigationController.

يقوم هذا تلقائيا بتحديث عنوان زر الخلفي في وحدة التحكم التالية، طالما قمت بتعيين self.title العودة إلى ما يجب أن يكون فيه viewWillAppear لا أستطيع رؤية هذه الطريقة مما تسبب في العديد من المشاكل.

هذا العمل بشكل أفضل بالنسبة لي. يحاول :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

في SWIFT / IOS8، ما يلي يعمل بالنسبة لي:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

استدار من إجابة فيليب.

حسنا، ها هي الطريق. إذا كان لديك وحدة تحكم عرض "أولا"، يمكنك التنقل في وحدة تحكم عرض أخرى "الثانية" عن طريق الضغط على زر أو إلخ. تحتاج إلى القيام ببعض العمل. تحتاج أولا إلى إنشاء BARBUTTONITEM في طريقة عرض ViewDidDLoad "الثانية"

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

بعد القيام بذلك، تحتاج إلى الكتابة إلى رمز "btnback" إجراء في ملف .m نفسه مثل هذا؛

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

هذا كل شئ.

كان لدي جهاز تحكم عرض الأصلي مع عنوان طويل حقا. أدى ذلك إلى نزيف نص زر الخلفي في عنوان وحدة التحكم في عرض الطفل.

بعد تجربة مجموعة من الحلول المختلفة، هذا ما انتهى به الأمر (التوسع في نهج @ john.k.doe):

باستخدام XCode 7.2، SWIFT 2

  1. في لوحة العمل، أضف أ Navigation Item إلى الأبوين عرض مشهد تحكم (وليس الطفل VC)

navigation item

  1. على ال Attributes Inspector من الجديد الخاص بك Navigation Item, ، اكتب في space شخصية في Back Button حقل. أكثر في هذا لاحقا.

navigation item in View Hierarchy

add a space character to the Back Button field

  1. في ال الأبوين عرض وحدة التحكم، أضف التعليمات البرمجية التالية:

مقتطف:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

تفسير:

نوع الزر الخلفي ينتمي إلى وحدة تحكم عرض الأصل. ال Navigation Item يمنحك مقبض للزر الخلفي، حتى تتمكن من ضبط العنوان في الرمز أو في لوحة العمل.

ملحوظة:

إذا تركت Navigation Item Back Button النص كسلسلة فارغة افتراضية، سيصبح عنوان الزر الخلفي "مرة أخرى".

مناهج أخرى العمل، لماذا تستخدم هذا واحد؟:

في حين أنه من الممكن تجاوز عنوان الزر الخلفي على وحدة التحكم في عرض الأطفال، فقد كان تحديا في الحصول على مقبض لذلك حتى تومض بالفعل لفترة وجيزة على الشاشة.

بعض الأساليب بناء زر رجعي جديد وتجاوز المرء الموجود. أنا متأكد من أنه يعمل، وربما ضروري في بعض حالات الاستخدام. لكنني أفضل الاستفادة من واجهات برمجة التطبيقات الحالية عند الإمكان.

تغيير title من المراقب الرئيسي للعرض هو الحل الأسرع لبعض المواقف. ومع ذلك، فإن هذا يغير العنوان الأصل لذلك عليك إدارة الدولة. الأمور أيضا الحصول على فوضوي مع Tab Bar Controller لأن التغييرات العنوان تسبب آثار جانبية مع Tab Bar Item العناوين.

بالنسبة لأولئك الذين يستخدمون القصص المصورة، ما عليك سوى اختيار الوالد (وليس الشخص الذي يحمل عرض الهدف) عرض إطار تحكم (تأكد من النقر فوق اليمين على شريط التنقل، ثم افتح السمات المفتشية، حيث ستجد ثلاثة أشكال المدخلات. الثالثة " الزر الخلفي "هو أننا نبحث عنه.

نسخة سريعة:

في ViewController طفلك:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}

إليك طريقة أخرى للقيام بذلك.

في وحدة التحكم الأصل الخاصة بك، قم بتطبيق الطريقة التالية:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

في وحدة التحكم في طفلك، عندما تريد تغيير العنوان، سيعمل هذا:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

لم أكن قادرا على الحصول على parentViewController الممتلكات للعمل:

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

لا أعرف ما إذا كان هذا خطأ أو لا أستخدمه بشكل صحيح. ولكن الاستيلاء على وحدة تحكم الرؤية الثانية إلى آخر في viewControllers تشير مجموعة إلى وحدة تحكم العرض الأصل، ويمكنني الاتصال بطرق الأصل بشكل صحيح مع هذا المرجع.

نعم. أنا شخصيا كره كل هذه الخيارات. لذلك توصلت مع بلدي.

بناء على المعلومات التي رأيتها. يبدو أن وحدة تحكم الرؤية السابقة تتحكم في زر "الظهر" الخاص بها والتي سيتم تقديمها على وحدة تحكم العرض المدفوعة.

لقد قمت بإنشاء طريقة تحميل كسول للتنقل على وحدة التحكم التي تريد زر العودة مرة أخرى.

الألغام هي دعوة تحكم المشتري

دعوة المشتري هو النص الذي تم تعيينه افتراضيا.

لكن الزر الخلفي بحاجة إلى أن تدعو

هنا هو الكود الذي استخدمته لإنشاء الزر الخلفي.

لقد وضعت هذا الرمز في الجزء العلوي من ملف تطبيق وحدة التحكم (.m) وتجاوز طريقة Super's تلقائيا.

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

أشعر أن هذا هو وسيلة أكثر أناقة لإنجاز هذا.

أضع هذا الرمز في مكان واحد، ويتم ملء تلقائيا عند الحاجة.

لا حاجة لاستدعاء الرمز قبل كل طلب دفع.

أتمنى أن يساعدك هذا

UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

هنا هو الجواب:

في viewDidAppear:animated (ليس في viewDidLoad) هل ما يلي

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

أنه إذا كنت ترغب في الحفاظ على شكل الزر الخلفي.

لم يتم شرح أي من الحلول هنا من أجلي. إذن ما فعلته هو إزالة العنوان من المشهد حيث جئت من الطريقة التالية:

self.title = @"";

لذلك عند تقديم مشهد جديد لا يظهر النص الخلفي.

أنا أتفق على أن هذا ليس حلا واضحا على الإطلاق، ولكن عملت ولا شيء من أوضح من أجلي.

للسريع:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton

لقد وجدت، أن أسهل طريقة لتغيير اسم الزر الخلفي هي تعيين عنوان "عرض وحدات التحكم" إلى عنوان الزر الخلفي، ثم قم باستبدال عنوان TitleView في عنصر التنقل لوحدات التحكم في الملصقات المخصصة اسم.

مثله:

customviewcontroller.m.

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

سيؤدي ذلك إلى جعل عنوانك في UinAVIOVARBAR يبدو كما لو كان موليا. إعطاء وحدة تحكم الرؤية القدرة على أن يكون لديك عنوان مفصولة وعنوان زر الظهر.

في حالة عرض وحدة التحكم A و B، A هي المسؤولة عن إخبار كيف يجب أن ينظر إلى الزر "مرة أخرى"، بينما يتم عرض B.

تحرير: هذا أيضا يحتفظ أيضا بالمظهر الأصلي للمظهر الأصلي (عنصر زر شريط السهم الأيسر).

هذا الرمز يعمل أيضا. ضع هذا على وحدة تحكم الجذر لوحدة تحكم الملاحة:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

لقد وجدت أنه من الأفضل تغيير عنوان وحدة تحكم العرض الحالية في مكدس التنقل إلى النص المطلوب من الزر الخلفي قبل الدفع إلى وحدة تحكم الرؤية التالية.

على سبيل المثال

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

ثم في ViewDididAppear قم بتعيين العنوان مرة أخرى إلى العنوان المطلوب ل VC الأصلي. هاهو!

ايم جديدة في دائرة الرقابة الداخلية ولكن سوف توفر بلدي بسيطة جدا الإجابة الغالبة وحدة تحكم الملاحة الفئة.لقد بسيطة تجاوز push و pop طرق حفظ عنوان السابقة تحكم الرأي.آسف للصق في شبيبة كتلة.كان مشوش كيفية الماضي في العادي كتلة التعليمات البرمجية.

#import "MyCustomNavController.h"


@implementation MyCustomNavController {

    NSString *_savedTitle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
    _savedTitle = self.topViewController.title;

    self.topViewController.title = title;
    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {

    [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
    return [super popViewControllerAnimated:animated];
}

@end

self.navigationController.navigationBar.backItem.title = @"TEXT";

وفي سويفت:

self.navigationController?.navigationBar.backItem?.title = "TEXT"
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

يمكنك وضعه أينما كنت ترغب في التعليمات البرمجية في وحدة تحكم Parrent، مما يتيح لك أن يكون لديك backbuttons مختلفة لآراء الأطفال المختلفة.

معظم الحلول تقتل النمط الأصلي في BackButton (الزر الأيسر الساحب الزر) أثناء إضافة زر معتاد مع العنوان المطلوب.
لذلك للحفاظ على النمط الأصلي هناك طريقتان:
1st: لاستخدام نمط زر غير موثق (110 أو شيء من هذا القبيل) الذي أفضل عدم القيام به. ولكن إذا كنت تريد أن تجد كيفية القيام بذلك هنا، على Stackoverflow.
2nd: لاستخدام فكرة trenskow. أحببت ذلك وأستعبها تغير بعض الشيء.
بدلا من التغلب - (NSSTRING *) عنوان قررت الاحتفاظ بالملكية الأصلية بالطريقة التالية (والتي تسمح لي باستخدام عناوين NIB وكذلك عنوان معين في Push State BTW).

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

هذا الحل يعمل بشكل جيد ويبدو أصلي. أيضا إذا استخدمها في طريقة تحميل ViewDIDID تمنع التنفيذ أكثر من 1 مرة.
كما أنني جربت حل Jessedc ولكن يبدو سيئا. يتسبب في تغيير شريط عنوان المستخدم على ذبابة النسخة الأصلية إلى Backbutton المطلوب والخلف.

هذا يعمل بالنسبة لي كنسخة "مبسطة" من الإجابات التي تم نشرها السابقة.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

تذكر أن تضع التعليمات البرمجية داخل وحدة تحكم العرض الأصل (على سبيل المثال الرأي الذي لديه عرض الجدول الخاص بك أو ayatableviewcontroller)، ليس عرض الطفل أو التفاصيل (مثل UiviewController).

يمكنك بسهولة توطين سلسلة زر الظهر مثل هذا:

backButton.title = NSLocalizedString(@"Back Title", nil);

لدينا اثنين من VC A و B.

إذا كنت ترغب في تغيير العنوان في B، فاكتب هذا الرمز في

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

SWIFT 4.1 XCode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)

جواب ستان كان الأفضل. ولكن تتمتع أيضا بمشكلة، عند استخدام وحدة التحكم مع شريط علامة تبويب وتغيير عنوان وحدة التحكم، يمكنك تغيير عنوان علامة التبويب "شريط علامة التبويب" أيضا] أفضل إجابة هي تغيير View_Controller.navigtionItem.title فقط واستخدام View_controller.naVITITEM .title في الوظيفة. الإجابة هنا: (مع قوس وإضافتها إلى ViewDidLoad

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

في نفسي استخدم، أنا جعلها وظيفة مثل هذا، فقط لديك ميزة مع رمز سطر واحد في شاشة ViewDidID.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}

إذا كنت لا تريد تغيير نص الزر الخلفي فقط لنفس النص وتبقى شكل السهم الأيسر الأصلي، ولكن أيضا القيام بشيء ما عند النقر فوق المستخدم الزر الخلفي، أوصي بإلقاء نظرة حول بلدي "customnavigntroller.".

المشكلة:"العودة" النص في شريط التنقل لا يمكن استبداله.

السبب:"العودة" التسمية في شريط التنقل بعد دفع الرأي لأن .سمة العنوان في نظر الوالدين تحكم مجموعة النيل (أو لا initialised).

حل واحد:إذا كنت ضبط النفس.title="أيا كان" سوف نرى أنه بدلا من "العودة" سوف تظهر "أيا كان" بعد دفع جديدة تحكم الرأي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top