আমি কীভাবে নেভিগেশন বারে "পিছনে" বোতামটির শিরোনামটি পরিবর্তন করব


224

বর্তমানে বাম বারের বোতামের ডিফল্ট মান হল সেই ভিউয়ের শিরোনাম যা বর্তমানটিকে লোড করে, অন্য কথায় ভিউটি বোতামটি টিপানোর সময় প্রদর্শিত হবে (পিছনের বোতাম)।

আমি বোতামে প্রদর্শিত পাঠ্যটি অন্য কোনওটিতে পরিবর্তন করতে চাই।

আমি নিয়ামকের ভিউডিডলড পদ্ধতিতে নিম্নলিখিত কোডের লাইনটি দেওয়ার চেষ্টা করেছি তবে এটি কাজ করছে বলে মনে হচ্ছে না।

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

আমার কি করা উচিৎ?

ধন্যবাদ।

উত্তর:


345

এটি এমন পদ্ধতিতে রাখা উচিত যা ভিউকন্ট্রোলারটিকে "নিউ টাইটেল" শিরোনাম বলে। পুশ বা পপভিউকন্ট্রোলারের স্টেটমেন্টের ঠিক আগে।

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

47
চাইল্ড ভিউ কন্ট্রোলারে থাকাকালীন চাইল্ড ভিউ কন্ট্রোলার থেকে এ কল করা কার্যকর হবে না। চাইল্ড ভিউ কন্ট্রোলারের মধ্যে থাকা অবস্থায় আপনাকে পিতামাতার ভিউ কন্ট্রোলারের কাছ থেকে কল করতে হবে।
অ্যালেক্স রেনল্ডস

2
আমার তৃতীয় স্তরের ভিউ কন্ট্রোলারের জন্য দ্বিতীয় বোতামটি পরিবর্তন করতে (দ্বিতীয় ধাক্কা) আমাকে উপরের উত্তরের পরিবর্তে নিম্নলিখিত লাইনটি ব্যবহার করতে হয়েছিল: [[স্ব.প্যারেন্টভিউ কনট্রোলার নেভিগেশন আইটেম] সেটব্যাকবার্ট বাটন আইটেম: নতুনব্যাকবটন]; আমি কি ভুল কিছু করছি?
জোনবি 12

4
জর্ডান বলেছেন যে কোডটি কোথায় রাখবেন সে সম্পর্কে তিনি "[যুক্ত করেছেন] খানিকটা আরও স্পষ্টতা।" এখানে আরও স্পষ্টতা রয়েছে: দ্বিতীয় (ওরফে শিশু) নিয়ামককে ধাক্কা দেওয়ার জন্য কল করার আগেই এটি প্রথম (ওরফে প্যারেন্ট) নিয়ামককে রেখে দিন।
benvolioT

1
আপনি একটি কাস্টম বেসভিউ কনট্রোলার তৈরি করতে পারেন এবং এতে রেখে দিতে পারেন-viewDidLoad:
আর্টফিল

2
ধাক্কা বা পপ করার আগে আপনাকে এটি করতে হবে না। আপনি এটি ভিডডিলোড বা লোডভিউতে বা যেখানেই আপনি এই দর্শনটির জন্য শিরোনাম এবং অন্যান্য বৈশিষ্ট্য নির্ধারণ করতে পারেন। আইএমএইচও, নীচে ভিক্টর বোগদানের উত্তর পরিষ্কার cle
জো স্ট্রাউট

98

চাইল্ডভিসিতে এটি আমার পক্ষে কাজ করেছিল ...

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

সুইফটেও কাজ করে!

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

4
এক্সকোড 5.0.2 এ আইওএস 7-তে পরীক্ষা এবং যাচাই করা হয়েছে। আপনি যদিও এটিতে ফিরে যান এটি পূর্ববর্তী স্ক্রিনের শিরোনামটিকে পিছনে বদলে দেবে।
অ্যালেক্স জাভাটোন

সহজ সমাধান। আইওএস 6 এবং 7 উভয় ক্ষেত্রেই কাজ করে বেস ইউআইভিউউকন্ট্রোলারটিতে রাখুন এবং সম্পন্ন করুন। আইবি সমাধানের তুলনায় অনেক ভাল বা ভিসি ভিসি-তে সেট করা।
এরিক চেন

46
এটি পূর্ববর্তী ভিউ কন্ট্রোলারের শিরোনাম পরিবর্তন করে, এই সমাধানটিতে এটিই সমস্যা
নিকিতা

2
@ নিকিতা, আপনি টাইলটি আবার উইলডিস্পায়ার
ড্যান

81

ব্যাকবার্ট বাটন আইটেমের জন্য এখানে ডকুমেন্টেশন রয়েছে :

"এই নেভিগেশন আইটেমটি স্ট্যাকের উপরের আইটেমের নীচে থাকলে, নেভিগেশন কন্ট্রোলারটি নেভিগেশন আইটেমটি থেকে নেভিগেশন বারের জন্য পিছনের বোতামটি নিয়ে আসে [[...] আপনি যদি পিছনের বোতামের জন্য কোনও কাস্টম চিত্র বা শিরোনাম নির্দিষ্ট করতে চান , আপনি পরিবর্তে এই সম্পত্তিটিতে একটি কাস্টম বার বোতাম আইটেম (আপনার কাস্টম শিরোনাম বা চিত্র সহ) বরাদ্দ করতে পারেন। "

কন্ট্রোলার ( "পিতামাতার" দর্শন নিয়ন্ত্রণকারী) দেখুন:

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

যখন অন্য কোনও ভিউ কন্ট্রোলার বি নেভিগেশন স্ট্যাকের শীর্ষে থাকে এবং এর ঠিক নীচে থাকে, বি এর পিছনের বোতামটির শিরোনাম "শর্ট" থাকবে


4
জটিল অংশটি হ'ল সন্তানের দৃশ্যের পরিবর্তে প্যারেন্ট ভিউ কন্ট্রোলারে পিছনের বোতামটি সেট করা দরকার। এক ঘন্টা নষ্ট করা সবেমাত্র এটি আবিষ্কার করে।
মার্কুরিয়াল

56

স্টকবোর্ড ব্যবহার করে এক্সকোড ৪.৫-এ, আমি এখন পর্যন্ত সবচেয়ে সহজ সমাধানটি খুঁজে পেয়েছি যখন ব্যাক বোতামের মান পরিবর্তনশীলভাবে পরিবর্তন করতে হয় না তা হল ভিউ কন্ট্রোলারের নেভিগেশন আইটেমের সাথে যুক্ত "ব্যাক বোতাম" ক্ষেত্রটি ব্যবহার করা যেখানে আপনি "পিছনে" বোতামটি অন্য কিছু বলতে চাই।

উদাহরণস্বরূপ, নীচের স্ক্রিনশটে, আমি যে ভিউ কন্ট্রোলার (গুলি) এর পিছনে বাটন চাই যা আমি পিছনের বোতামটির শিরোনাম হিসাবে "পিছনে" রাখতে চাইছি।

এখানে চিত্র বর্ণনা লিখুন

অবশ্যই, প্রতিটি সময় কিছুটা আলাদা বলার জন্য যদি আপনার পিছনের বোতামের প্রয়োজন হয় তবে এটি কাজ করবে না ... এর জন্য এখানে অন্যান্য সমাধানগুলি রয়েছে।


মূল প্রশ্নটি স্টোরিবোর্ডগুলি ব্যবহার সম্পর্কে কিছু বলেনি, সুতরাং এটি অবশ্যই গ্রহণযোগ্য উত্তর নয় তবে এটি স্টোরিবোর্ড ভিত্তিক বিকাশের জন্য একটি সমাধান সংশোধন করুন good
ভিলাপাসু

42

আমি জানি, প্রশ্নটি অনেক পুরানো, তবে আমি একটি দুর্দান্ত সমাধান পেয়েছি।

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

চাইল্ডভিউ থেকে কাজ! আইওএস 7 দিয়ে পরীক্ষিত।


এটি কেবলমাত্র এক স্তরে কাজ করে বলে মনে হচ্ছে। এটি আমার সন্তানের সন্তানের পক্ষে কাজ করছে না। আইওএস 8.
নরকো

26

হয়তো আমি খুব সরলবাদী হয়ে উঠছি তবে অ্যাপলের ডকুমেন্টেশন থেকে শব্দটি হ'ল:

যদি কোনও কাস্টম বার বোতাম আইটেমটি ভিউ কন্ট্রোলারগুলির দ্বারা কোনও একটি দ্বারা সুনির্দিষ্ট না করা হয়, একটি ডিফল্ট ব্যাক বোতাম ব্যবহার করা হয় এবং এর শিরোনামটি পূর্ববর্তী ভিউ কন্ট্রোলারের শিরোনাম বৈশিষ্ট্যের মান হিসাবে সেট করা হয় - যা ভিউ কন্ট্রোলারের এক স্তর নীচে থাকে স্ট্যাক

উপরের সঠিক চিহ্নিত চিহ্নটি প্যারেন্ট কন্ট্রোলার থেকে একটি ডিফল্ট বোতাম আইটেম সেট করে। এটি সঠিক উত্তর, তবে আমি পরিবর্তন করে সমস্যাটি সমাধান করছিself.title ন্যাভিগেশনকন্ট্রোলার স্ট্যাকের উপরে নতুন নিয়ামককে চাপ দেওয়ার আগে ইউআইভিউকন্ট্রোলারের সম্পত্তি ।

এটি স্বয়ংক্রিয়ভাবে পরবর্তী কন্ট্রোলারে পিছনের বোতামের শিরোনাম আপডেট করে এবং যতক্ষণ আপনি self.titleএটিতে থাকা উচিত ততক্ষণ সেট করে রাখুন viewWillAppearআমি এই পদ্ধতিটি অনেক বেশি সমস্যার কারণে সৃষ্টি করতে পারি না।


19

এই কাজটি আমার পক্ষে আরও ভাল। চেষ্টা করুন:

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

19

সুইফ্ট / আইওএস 8-তে, নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে:

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

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

ফিলিপের উত্তর থেকে পোর্ট করা হয়েছে।


দ্রুতগতি 1.1 সিনট্যাক্স হলself.navigationController?.navigationBar.topItem?.backBarButtonItem
ওয়ারেন বার্টন

3
স্টাইলটি UIBarButtonItemStyle.Plain হওয়া উচিত
মাইক্রো

2
এর জন্য ধন্যবাদ. সত্যিই কী করুণ এপিআই এটি। এবং সাধারণভাবে ইউআইকিটির প্রতিনিধি আইওএসে নেভিগেশন বার এবং স্ট্যাটাস বারের মধ্যে, আমরা এখনও এই .শ্বর্যময় প্ল্যাটফর্মের জন্য বিকাশ করি তা অবাক করা wonder স্ট্যাক ওভারফ্লো এবং এর অবদানকারীদের জন্য শিশুর যীশুকে ধন্যবাদ!
Womble

@ ওয়েবমাইল: আপনার কয়েক মাসের জন্য অ্যান্ড্রয়েডের জন্য বিকাশ করা উচিত;)
fl034

17

ঠিক আছে, এখানে উপায়। আপনার যদি একটি ভিউ কন্ট্রোলার "প্রথম" থাকে এবং আপনি একটি বোতাম বা অন্যকে চাপ দিয়ে অন্য ভিউ কন্ট্রোলার "সেকেন্ড" নেভিগেট করেন তবে আপনাকে কিছু কাজ করতে হবে। প্রথমে আপনাকে "দ্বিতীয়" ভিউ কন্ট্রোলারের ভিউডিডলড পদ্ধতিতে বারবটন আইটেমটি তৈরি করতে হবে;

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

এটি করার পরে আপনার "বিটিএনব্যাক" অ্যাকশনটির জন্য একই। এম ফাইলে এই জাতীয় কোড লিখতে হবে;

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

এখানেই শেষ.


2
একটি leftBarButtonItemএকটি চেহারা নেই backBarButtonItemযে যদি আবেদন নকশা গুরুত্বপূর্ণ।
অ্যালেক্স রেনল্ডস

1
উপরে বর্ণিত সমাধানগুলির মধ্যে (আপনাকে অনেক ধন্যবাদ) মনে হচ্ছে এটি কাজ করে যাচ্ছেন, উপরে অ্যালেক্সের মতোই বলা হয়েছে, বাম বারের বোতামটি পিছনের বার আইটেমটির মতো দেখাচ্ছে না। আমি কীভাবে এটিকে ব্যাক বার আইটেমের মতো দেখতে পারি ???
ডেল

17

আমার একটি সত্যিকারের দীর্ঘ শিরোনাম সহ একটি পিতামাতার ভিউ নিয়ন্ত্রক ছিল। এর ফলে পেছনের বোতামের পাঠ্যটি শিশু দর্শন নিয়ন্ত্রকের শিরোনামে রক্তক্ষরণ হয়েছে।

বিভিন্ন সমাধানের একগুচ্ছ চেষ্টা করার পরে, আমি এটিই শেষ করেছি (@ জন.কম.ডো অ্যাপ্রোচকে প্রসারিত):

এক্সকোড 7.2, সুইফট 2 ব্যবহার করে

  1. স্টোরিবোর্ড, একটি যোগ Navigation Itemকরার মূল দেখুন কন্ট্রোলার দৃশ্য (না শিশু ভিসি)

নেভিগেশন আইটেম

  1. উপর Attributes Inspectorআপনার নতুন Navigation Item, একটি টাইপ spaceচরিত্রের Back Buttonক্ষেত্র। এই সম্পর্কে আরও পরে।

ভিউ হায়ারার্কিতে নেভিগেশন আইটেম

ব্যাক বোতাম ক্ষেত্রে একটি স্পেস অক্ষর যুক্ত করুন

  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শিরোনামগুলির সাথে পার্শ্ব প্রতিক্রিয়া সৃষ্টি করে ।


10

স্টোরিবোর্ডগুলি ব্যবহারকারীদের জন্য কেবল পিতামাতাকে বেছে নিন (টার্গেট ভিউ ধারণ করে এমনটি নয়) দেখুন কন্ট্রোলার ফ্রেম (নিশ্চিত করুন আপনি নেভিগেশন বারে ডানদিকে ক্লিক করেছেন, তারপরে অ্যাট্রিবিউটস ইন্সপেক্টর খুলুন, যেখানে আপনি তিনটি ফর্ম ইনপুট পাবেন। তৃতীয়টি " পিছনে বোতাম "আমরা খুঁজছি হয়।


4
আপনি যদি স্থানীয়করণের বিষয়ে চিন্তা না করেন তবে এটিই সেরা সমাধান।
মিকুয়েল

7

সুইফ্ট সংস্করণ:

আপনার সন্তানের মধ্যে ভিউ কন্ট্রোলার:

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

এটি প্রকৃতপক্ষে ভিউ কন্ট্রোলারের শিরোনামটিকে স্ট্যাকের আগের অংশটিকে "টেক্সট" এ পরিবর্তন করবে যা আদর্শের চেয়ে কম।
গ্র্যাভিট্রন

6

এটি করার আরেকটি উপায় এখানে।

আপনার প্যারেন্ট ভিউ কন্ট্রোলারে, নিম্নলিখিত পদ্ধতিটি প্রয়োগ করুন:

- (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অ্যারেতে দ্বিতীয় থেকে শেষের ভিউ কন্ট্রোলারটিকে প্যারেন্ট ভিউ কন্ট্রোলারের দিকে নির্দেশ করে এবং আমি সেই উল্লেখের সাথে প্যারেন্ট পদ্ধতিগুলিকে সঠিকভাবে কল করতে পারি।


6

ঠিক আছে. আমি ব্যক্তিগতভাবে এই সমস্ত অপশন ঘৃণা। তাই আমি আমার নিজের সাথে এসেছি।

আমি দেখেছি তথ্যের ভিত্তিতে। দেখা যাচ্ছে যে পূর্ববর্তী ভিউ কন্ট্রোলার তার নিজস্ব "পিছনে" বোতামের নিয়ন্ত্রণে রয়েছে যা পুশ ভিউ কন্ট্রোলারে উপস্থাপন করা হবে।

আমি নিয়ন্ত্রক নেভিগেশন আইটেমের জন্য একটি অলস লোড পদ্ধতি তৈরি করেছি যা পরিবর্তিত ব্যাক বোতামটি চায়।

খনি একজন আমন্ত্রিত ক্রেতা নিয়ামক

আমন্ত্রিত ক্রেতা হ'ল পাঠ্য যা ডিফল্টরূপে সেট করা হয়।

তবে পিছনের বোতামটি আমন্ত্রণ করা দরকার

এখানে কোডটি আমি ব্যাক বোতামটি তৈরি করতে ব্যবহার করেছি।

আমি এই কোডটি কন্ট্রোলারের ইমপ্লিমেন্টিও (। মি) ফাইলের শীর্ষে রেখেছি এবং এটি স্বয়ংক্রিয়ভাবে সুপারের পদ্ধতিটিকে ওভাররড করে।

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

    return item;
}

আমি মনে করি এটি সম্পন্ন করার জন্য এটি একটি আরও মার্জিত উপায়।

আমি এই কোডটি এক জায়গায় রেখেছি এবং এটি যখন প্রয়োজন হয় তখন স্বয়ংক্রিয়ভাবে পপুলেশন হয়।

প্রতিটি ধাক্কা অনুরোধের আগে কোড কল করার প্রয়োজন নেই।

আশাকরি এটা সাহায্য করবে


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

5

উত্তরটি এখানে:

ইন viewDidAppear:animated(না ইন viewDidLoad) নিম্নলিখিত করুন

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

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

এটি যদি আপনি পিছনের বোতামের আকারটি রাখতে চান।


খারাপ নয় যে তারা এটিকে শিরোনাম পরিবর্তন করতে পারে। আমি ভিউ ওয়াল অ্যাপ্লায় চেষ্টা করেছি এবং এটি কার্যকর হয় না।
ট্র্যাভিস এম।

5

এখানে বর্ণিত কোনও সমাধানই আমার পক্ষে কাজ করেনি। সুতরাং আমি যা করেছি তা হল শিরোনামটি দৃশ্যপটটি সরিয়ে দিয়ে যেখানে আমি নিম্নলিখিত উপায়ে এসেছি:

self.title = @"";

সুতরাং যখন নতুন দৃশ্য উপস্থাপন করা হবে তখন পিছনের পাঠ্যটি উপস্থিত হয় না।

আমি নির্মোহভাবে সম্মত হই যে এটি মোটেই সুস্পষ্ট সমাধান নয়, তবে কাজ করেছেন এবং ব্যাখ্যা করা কোনওটিই আমার পক্ষে কাজ করেনি।


ম্যান, আমি আপনাকে বলতে চাই, এটি 2017 এবং এটি এখনও পিছনে বোতামটি হ্যান্ডেল করতে in এ ব্যথা। আপনার পদ্ধতিটি আমার পক্ষে কাজ করেছিল এবং আমি "<" সাইন দিয়ে শেষ করেছিলাম যদিও আমি "বাতিল" শব্দটি চেয়েছিলাম, তবে আমি যা পেয়েছি তা স্থির করব। :)
অ্যানবিসউ

5

আমি খুঁজে পেয়েছি যে নেভিগেশন স্ট্যাকের বর্তমান ভিউ কন্ট্রোলারের শিরোনামটি পরবর্তী দৃশ্যের নিয়ামককে চাপ দেওয়ার আগে পিছনের বোতামের পছন্দসই পাঠ্যটিতে পরিবর্তন করা ভাল।

এই ক্ষেত্রে

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

তারপরে ভিউডিডঅ্যাপারে শিরোনামটি মূল ভিসির জন্য পছন্দসই শিরোনামে ফিরে আসুন। ভাল খবর!


5

সুইফ্টের জন্য:

    // 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

4

আমি খুঁজে পেয়েছি, ব্যাক বোতামটির নাম পরিবর্তন করার সবচেয়ে সহজ উপায় হল ভিউ কন্ট্রোলারদের শিরোনামটিকে পিছনের বোতামের শিরোনামে সেট করা এবং তারপরে ভিউ কন্ট্রোলার নেভিগেশন আইটেমটির শিরোনামটি প্রতিস্থাপনের সাথে এটি একটি কাস্টম লেবেলে আসল করে দেওয়া হয় নাম দিন।

এটার মত:

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

এটি ইউআইএনএভিগেশনবারে আপনার শিরোনামটিকে এমন মনে হবে যেন এটি স্থানীয়। দৃশ্যের নিয়ামককে পৃথক শিরোনাম এবং পিছনে বোতামের শিরোনাম রাখার ক্ষমতা প্রদান করা।

A এবং B দেখার নিয়ামকটির ক্ষেত্রে, এটিকে বি এর প্রদর্শিত হওয়ার সময় এটির পিছনের বোতামটি কীভাবে দেখা উচিত তা বলার জন্য দায়ী।

সম্পাদনা: এটি পিছনে বোতামের নেটিভ লুকও বজায় রাখে (বাম তীরযুক্ত বার বোতাম আইটেম)।


4

এই কোডটিও কাজ করে। এটিকে নেভিগেশন নিয়ামকের রুট কন্ট্রোলারে রাখুন:

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

4

আইওএস এ আমি নতুন তবে আমি নেভিগেশন নিয়ন্ত্রক শ্রেণিকে ওভাররাইড করার খুব সহজ উত্তরটি সরবরাহ করব। আমার কাছে সাধারণ ধাক্কা এবং পপ পদ্ধতিতে ওভাররাইড রয়েছে এবং পূর্ববর্তী ভিউ কন্ট্রোলারের শিরোনাম সংরক্ষণ করুন। জেএস ব্লকে আটকানোর জন্য দুঃখিত এটি কীভাবে সাধারণ কোড ব্লকে গতায় যায় তা নিয়ে কিছুটা বিভ্রান্তি ছিল।

#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


4

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

এবং সুইফটে:

self.navigationController?.navigationBar.backItem?.title = "TEXT"

3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

কোডটি পেরেন্ট কন্ট্রোলারে আপনি যেভাবেই পছন্দ করতে পারেন, যা আপনাকে বিভিন্ন সন্তানের দর্শনের জন্য পৃথক ব্যাকব্যাটনের অনুমতি দেয়।


3

পছন্দসই শিরোনাম সহ একটি সাধারণ বোতাম যুক্ত করার সময় বেশিরভাগ সমাধান ব্যাকবটন (বাম তীরযুক্ত বার বোতাম) এর মূল স্টাইলটিকে হত্যা করে।
মূল শৈলীটি ধরে রাখার জন্য 2 টি উপায় রয়েছে:
1 ম: নথিভুক্ত বোতাম শৈলী (110 বা এর মতো কিছু) ব্যবহার করতে যা আমি পছন্দ করি না। তবে আপনি চাইলে স্ট্যাকওভারফ্লোতে এটি এখানে কীভাবে করবেন তা আপনি খুঁজে পেতে পারেন।
দ্বিতীয়: আই ট্রেনস্কোর ধারণাটি ব্যবহার করতে use আমি এটি পছন্দ করেছি এবং আমি এটি কিছুটা পরিবর্তিত ব্যবহার করেছি।
- (এনএসএসটিং *) শিরোনামটি ওভাররাইড করার পরিবর্তে আমি নিম্নলিখিত উপায়ে মূল শিরোনামটি রাখার সিদ্ধান্ত নিয়েছি (যা আমাকে নিবের শিরোনামগুলি পাশাপাশি পুশ স্টেট বিটিডব্লুতে প্রদত্ত শিরোনাম ব্যবহার করতে দেয়)।

- (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; 
    }
}

এই সমাধানটি ভাল কাজ করে এবং এটি দেশীয় দেখায়। এছাড়াও যদি ভিডডিডলড পদ্ধতিতে এটি ব্যবহার করে তবে এটি কার্যকরভাবে আরও 1 বার প্রতিরোধ করে।
এছাড়াও আমি একটি জেসেডসকের সমাধান চেষ্টা করেছি তবে এটি দেখতে খারাপ দেখাচ্ছে। এটি মূল থেকে ব্যাকব্যাটনের পছন্দসই এবং পিছনে ফ্লাইতে ব্যবহারকারীর শিরোনাম বারের পরিবর্তনের জন্য দৃশ্যমান হয়।


2

এটি আমার জন্য পূর্ববর্তী পোস্ট করা উত্তরগুলির "সরলীকৃত" সংস্করণ হিসাবে কাজ করে।

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

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

কোডটি প্যারেন্ট ভিউ কন্ট্রোলারের ভিতরে রাখার কথা মনে রাখবেন (যেমন আপনার টেবিল ভিউ বা ইউআইটিএবলভিউ কনট্রোলার রয়েছে এমন দৃশ্য), না সন্তান বা বিস্তারিত ভিউ (যেমন UIViewController)।

আপনি সহজেই পিছনের বোতামের স্ট্রিংটি সহজেই স্থানীয়করণ করতে পারেন:

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

2

আমাদের দুটি ভিসির এ এবং বি আছে have

আপনি যদি বি তে শিরোনাম পরিবর্তন করতে চান তবে এই কোডটি A তে লিখুন

- (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];

}

সুইফট 4.1 এক্সকোড 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)

1

স্ট্যানের উত্তরটি সেরা ছিল। তবে এটিতেও সমস্যা রয়েছে, যখন আপনি একটি ট্যাব বারের সাহায্যে কন্ট্রোলারটি ব্যবহার করেন এবং নিয়ন্ত্রণকারীর শিরোনাম পরিবর্তন করেন, আপনি ট্যাব বারের শিরোনামটিও পরিবর্তন করতে পারেন o সুতরাং সর্বোত্তম উত্তরটি শুধুমাত্র ভিউ_কন্ট্রোলআরাইভেশনআইটেম.টাইটেল পরিবর্তন করে ভিউ_কন্ট্রোলআরএনভিগেশন আইটেমটি ব্যবহার করে ফাংশনে .title। উত্তরটি এখানে রয়েছে: (এআরসি সহ এবং এগুলি দর্শনের দৃশ্যের সাথে যুক্ত করুন)

  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;
  }

আমার নিজের ব্যবহারে, আমি এটিকে এটির মতো একটি ফাংশন হিসাবে তৈরি করি, ভিউডিডডোডে কেবল একটি লাইন কোড সহ বৈশিষ্ট্যটি রাখুন।

+ (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;
  }
}

1

আপনি যদি কেবল ব্যাক বোতামের পাঠ্যটিকে একই পাঠ্যে পরিবর্তন করতে না চান এবং মূল বাম-তীরের আকারটি অবলম্বন করতে চান না, তবে ব্যবহারকারীরা পিছনে বোতামটি ক্লিক করেন এমন কিছু করার জন্য, আমি আপনাকে আমার " কাস্টমনাভিশনকন্ট্রোলার " এর আশেপাশে দেখার পরামর্শ দিই


1

সমস্যা: নেভিগেশন বারের "পিছনে" পাঠ্যটি প্রতিস্থাপন করা যাবে না।

কারণ: "ব্যাক" লেবেলটি একটি ভিউতে চাপ দেওয়ার পরে নেভিগেশন বারে সেট করা হয়েছে কারণ প্যারেন্ট ভিউ কন্ট্রোলারে .title অ্যাট্রিবিউটটি নিল (বা আরম্ভ নয়) সেট করা হয়েছিল।

এক সমাধান: আপনি যদি স্ব। টাইটেল = "যাই হোক না কেন ..." সেট করেন তবে আপনি দেখতে পাবেন যে "ব্যাক" পরিবর্তে "ভিউ ..." নতুন ভিউ কন্ট্রোলারকে চাপ দেওয়ার পরে উপস্থিত হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.