শিরোনাম ছাড়াই ইউআইএনএভিগেশনবার কাস্টম ব্যাক বোতাম


231

আমি শিরোনাম ছাড়াই আইওএস 7 এবং উপরের নেভিগেশন ব্যাক বোতামটি কীভাবে কাস্টমাইজ করতে পারি? (যেমন কেবল তীর সহ)

self.navigationItem.leftBarButtonItem = self.editButtonItem;

আমি কেবল ভাবছি তাদের কোনও সেলফ্যাকব্যাক বাটন আইটেম আছে কিনা;

অথবা

এটার মতো কিছু?

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
                   initWithBarButtonSystemItem:UIBarButtonSystemItemBACK 
                   target:self action:@selector(back)];

3
কাস্টম রঙ দিয়ে এবং কোনও শিরোনাম ছাড়াই শেভরন তৈরি করতে আপনি @ হিরোশি উত্তর + নেভিগেশন বার টিন্ট কালার সম্পত্তি ব্যবহার করতে পারেন
দিমিত্রি ঝুকভ ২

যাদের একটি ট্যাব বার রয়েছে এবং আপনি পিছনের বোতামের পাঠ্যটি চান না, তাদের মধ্যে ফিক্সটি হ'ল: ট্যাববারকন্ট্রোলারটির ভিডডিডলয়েড () -এ: self.navicationItem.backBarButtonItem = UIBarButtonItem (শিরোনাম: "", শৈলী:। সরল, লক্ষ্য: শূন্য, ক্রিয়া: শূন্য)
বোরজ

উত্তর:


313

এটি আসলে বেশ সহজ, আমি এখানে যা করি তা এখানে:

উদ্দেশ্য গ

// Set this in every view controller so that the back button displays back instead of the root view controller name
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

সুইফট 2

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)

সুইফট 3

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

এই লাইনটি ভিউ কন্ট্রোলারে রাখুন যা স্ট্যাকের দিকে চাপ দিচ্ছে ( পূর্ববর্তী দেখুন নিয়ামক )। সদ্য চাপানো ভিউ কন্ট্রোলার ব্যাক বোতামটি এখন আপনি ডিভিউথটাইলের জন্য যা কিছু রেখেছেন তা দেখাবে, যা এই ক্ষেত্রে একটি খালি স্ট্রিং।


3
আমি এটি ব্যবহার করেছি তবে শিরোনামটি আসে এবং অ্যানিমেটেড ফ্যাশনে অদৃশ্য হয়ে যায় ??
ব্যবহারকারী 1010819

7
ধন্যবাদ কাইল! আমি একটি উপায় আইওএস 7 এর ডিফল্ট ব্যাক বোতাম আমি আমার এই করা নামান্তর করতে খুঁজছেন করছি prepareForSegueদৃশ্য নিয়ামক মধ্যে এবং এটি পুরোপুরি কাজ করেন।
yiwei

1
@ ব্যবহারকারী 1010819 এটি প্রত্যাশিত আচরণ, বার বাটন আইটেমগুলি ভিউ কন্ট্রোলারগুলি স্যুইচ করার সময় সঞ্চারিত হবে an তুমি অর্জন করার জন্য কি চেষ্টা করতেছ?
কাইল বেজম্যান

1
@ আইইউইগাও সমস্যা নেই! এটি সেই জিনিসগুলির মধ্যে অন্য একটি যা আপনি যদি সঠিক কোডটি জানেন, তবে এটি বেশ সহজ! আমি আনন্দিত এটি সাহায্য করেছে!
কাইল বেজম্যান

3
আমার মনে হচ্ছে এটির একটি আপডেট দরকার, এটি এখনই কিছুই দেখায় না, তীরটি ডিফল্টভাবে নেই?
ম্যাথিজস সেগার্স

198

আমি আইওএস একক তীর দিয়ে আমার পিছনের বোতামটি তৈরি করার একটি সহজ উপায় পেয়েছি।

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

ভিউএ বার বিকল্পগুলি নেভিগেট করুন

ভিউএ বার বিকল্পগুলি নেভিগেট করুন

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

"পিছনে বোতাম" বিকল্পে স্থান পূরণ করুন

"পিছনে বোতাম" বিকল্পে স্থান পূরণ করুন

ফলাফল:

ফলাফল:


স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম । যদি আপনি ইতিমধ্যে না পেয়ে থাকেন তবে আমরা কী ট্যুর করছি তা একবার দেখুন এবং আমরা কীভাবে কাজ করি সে সম্পর্কে সহায়তা কেন্দ্রের কিছু নিবন্ধ এবং এখানে সম্প্রদায়ের কিছু রীতিনীতি পড়ুন। সাইটের কার্যাবলীগুলির জন্য যদি আপনার কোনও সহায়তার প্রয়োজন হয় তবে অনুসন্ধান করতে ভয় পাবেন না, তারপরে মেটা স্ট্যাক ওভারফ্লোতে একটি প্রশ্ন জিজ্ঞাসা করুন (যদি আপনি এখনও উত্তর খুঁজে না পান)। ধন্যবাদ, এবং শুভকামনা! যাইহোক, আপনি এখন আপনার ইমেজ পোস্ট করতে পারেন ... :)
কোয়ান্টাস 94 ভারী

53
এটি কাজ করে, কেবল মনোযোগ দিন - আপনাকে পূর্ববর্তী কন্ট্রোলারের জন্য "ব্যাক বাটন" সেট করতে হবে (যেমন আপনার নেভিগেশন কন্ট্রোলারের
রুটভিউ

নিশ্চিত হয়ে নিন যে ভিউএ নেভিগেশন আইটেমটিতে আপনার "hidsBackButton" টিআরইউ সেট করা নেই
শিম

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

1
আমার জন্য এটি শুধুমাত্র কাজ করে উভয় উত্স এবং গন্তব্য ViewController এর NavigationItem আছে Back Buttonএকটি একক স্থান অক্ষর সেট (অর্থাত উভয় ViewA এবং ViewB)
dcestari

72

শুধু একটি ইমেজ ব্যবহার করুন!

ওবিজে-সি :

- (void)viewDidLoad {
     [super viewDidLoad];
     UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Icon-Back"]
                                                                                        style:UIBarButtonItemStylePlain
                                                                                       target:self.navigationController
                                                                                       action:@selector(popViewControllerAnimated:)];
     self.navigationItem.leftBarButtonItem = backButton;
}

সুইফট 4 :

let backBTN = UIBarButtonItem(image: UIImage(named: "Back"), 
                              style: .plain, 
                              target: navigationController, 
                              action: #selector(UINavigationController.popViewController(animated:)))
navigationItem.leftBarButtonItem = backBTN
navigationController?.interactivePopGestureRecognizer?.delegate = self

Icon-Back.png

Icon-পিছনে

Icon-Back@2x.png

Icon-পিছনে @ 2x

Icon-Back@3x.png

Icon-পিছনে @ 23x


4
এই সমাধানের সাহায্যে আপনি "ফিরে যেতে যেতে সোয়াইপ" কার্যকারিতা আলগা মনে করছেন।
j7nn7k

16
navigationController?.interactivePopGestureRecognizer?.delegate = selfসোয়াইপ পিছনে অঙ্গভঙ্গি রাখার কৌশলটি করে
ভিক্টর কারমুজ

আমি এই উত্তরটি অনুসন্ধান করে চলেছি, সম্ভবত আমার সারা জীবন, অ্যাকশন নির্বাচনকারী or
দেস

29

আইওএস 7 এর নতুন ইন্টারফেস নিয়ম রয়েছে, সুতরাং আপনি যখন কোনও ইউআইভিউকে ধাক্কা দেন তখন কমপক্ষে পিছনের তীরটি রাখা ভাল। প্রোগ্রামটিমে "পিছনে" পাঠ্যটি পরিবর্তন করা খুব সহজ। ভিউতে ধাক্কা দেওয়ার আগে এই কোডটি যুক্ত করুন (বা আপনি স্টোরিবোর্ডগুলি ব্যবহার করছেন যদি সেটার জন্য প্রস্তুতি করুন):

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
      self.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"NEW TITLE" style:UIBarButtonItemStylePlain target:nil action:nil];
}

এটি ডিফল্ট "পিছনে" পাঠ্য পরিবর্তন করবে, তবে iOS7 স্টাইলযুক্ত পিছনের তীরটি রাখবে। ভিউটি চাপ দেওয়ার আগে আপনি পিছনের তীরটির জন্য রঙের রঙও পরিবর্তন করতে পারেন:

- (void)viewDidLoad{
     //NavBar background color:
     self.navigationController.navigationBar.barTintColor=[UIColor redColor];
//NavBar tint color for elements:
     self.navigationController.navigationBar.tintColor=[UIColor whiteColor];
}

আশা করি এটি আপনাকে সহায়তা করবে!


2
এটি সত্যই ভাল কাজ করে এবং অন্যান্য বিকল্পগুলির চেয়ে ভাল বলে মনে হয়। উদাহরণস্বরূপ, শিরোনামটি অন্য উত্তরগুলির থেকে বিপরীতে পূর্বের মানটিতে পুনরায় সেট করার দরকার নেই।
pr1001

26

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

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

নীচের চিত্র অনুযায়ী।  এটি আইওএস 7 এবং আইওএস 8 এর জন্য কাজ করে


আমি চেষ্টা করেছি, এটা কাজ করে। তবে আমি এখনও কোডটিতে শিরোনামটি পরিবর্তন করতে পারি না।
ইউ-লিন ওয়াং

এক্সকোড with নিয়ে কাজ করেছেন, তবে xCode8 -> ios10.X এ আর কাজ করবেন না, আমি @ iwasrobbed পদ্ধতি ব্যবহার করেছি
লুসিওবি

সব প্রতিভা সহজ!
Illya Krit

22

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

#import <objc/runtime.h>

@implementation UINavigationItem (ArrowBackButton)

static char kArrowBackButtonKey;

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method m1 = class_getInstanceMethod(self, @selector(backBarButtonItem));
        Method m2 = class_getInstanceMethod(self, @selector(arrowBackButton_backBarButtonItem));
        method_exchangeImplementations(m1, m2);
    });
}

- (UIBarButtonItem *)arrowBackButton_backBarButtonItem {
    UIBarButtonItem *item = [self arrowBackButton_backBarButtonItem];
    if (item) {
        return item;
    }

    item = objc_getAssociatedObject(self, &kArrowBackButtonKey);
    if (!item) {
        item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:NULL];
        objc_setAssociatedObject(self, &kArrowBackButtonKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return item;
}

@end

1
আমি upvated কিন্তু তারপরে পরিবর্তে একটি সহজ হ্যাক ব্যবহার করার সিদ্ধান্ত নিয়েছে - [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000) forBarMetrics:UIBarMetricsDefault]; ( উত্স ) - কিছুটা কম মার্জিত হতে পারে, তবে সুইজিং এ ওভারকিলের মতো অনুভূত হয়েছিল
dmur

2
সিরিয়াসলি আপনি সব ... অন্য কোনও সমাধান যেতে না। @ নিকি বিভাগ হিসাবে পোস্ট করা সমাধানটি কার্যকর করুন এবং দুবার ভাবেন না। এটি একটি দুর্দান্ত পুনরায় ব্যবহারযোগ্য সমাধান যা আপনি এই Prefix.pch ফাইলটি যুক্ত করলে অ্যাপ্লিকেশন ওয়াইড প্রয়োগ করা যেতে পারে। অ্যাপল বিদ্যমান শ্রেণিগুলিতে পদ্ধতি যুক্ত করার জন্য বিভাগগুলি ব্যবহার করে উত্সাহিত করে আপনার যখন সম্ভব হয় তখন এটির সুবিধা নেওয়া উচিত।
zmonteca

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

@ আলেসান্দ্রো ওরি এই বিশেষ ক্ষেত্রে, এটি নিরাপদ হওয়া উচিত কারণ সুইজলড পদ্ধতিটি UINavigationItemনিজস্ব পদ্ধতি, এতে কোনও উত্তরাধিকার জড়িত নেই। এবং _cmdপ্রাপ্তির সাথে জড়িত হওয়ার খুব সম্ভাবনা নেই। যাইহোক, এটি একটি ভাল পয়েন্ট। সুতরাং আপনি সমস্ত, আপনার প্রকল্পে যদি এই অসংখ্য সুইজলিং সহায়ক হয় তবে আপনিও এটি এখানে ব্যবহার করেছেন তা নিশ্চিত করুন।
সেকেন্ডসিটিসেইন্ট

21

সম্পাদনা: 2014-04-09: আমি খ্যাতি অর্জন করার সাথে সাথে আমার খারাপ লাগছে কারণ আমি আর এই কৌশলটি আর ব্যবহার করি না। আমি কাইল এর উত্তর সুপারিশ। এছাড়াও যে বিজ্ঞপ্তি selfএর self.navigationItem.backBarButtonItemদৃশ্য নিয়ামক ব্যাক বোতাম প্রদর্শিত হয় না, কিন্তু পূর্ববর্তী দৃশ্য নিয়ামক হতে ফিরে গেলেন।

পূর্ববর্তী ভিউ কন্ট্রোলারের জন্য যদি আপনার শিরোনাম পাঠ্যের প্রয়োজন না হয়, কেবল একটি শূন্য স্ট্রিং দিয়ে শিরোনামটি পূরণ করুন;

self.navigationItem.title = @"";
[self.navigationController pushViewController:viewController animated:YES];

এটি পুশ ভিউ কন্ট্রোলারে শেভ্রনের সাথে "পিছনে" দেখানো রোধ করবে।

সম্পাদনা: এমনকি আপনি শূন্য শিরোনামের পাঠ্যটি ব্যবহার করেন, শিরোনাম viewWillAppear:ব্যতীত পূর্ববর্তী ভিউ কন্ট্রোলারের শিরোনামটি সেট করা যখন ভিউ কন্ট্রোলার পপড হয় তখন একটি পলক জ্বলে উঠতে পারে। আমার মনে হয় "টুইটার অ্যাপ" ফ্লিকারটি এড়ানোর জন্য আরও সূক্ষ্ম হ্যাক করবে বলে মনে হচ্ছে।


আমার এখানে কেবল সমস্যা ছিল যে আমি যখন আগের নেভিগেশন শিরোনামটি ফিরে যেতে নেভিগেশন বারে চাপলাম তখন ফাঁকা হয়ে যায়। কোন পথে?
Alioo

@ অলিও আমি কি "EDIT" লাইনে উল্লেখ করেছি তা চেষ্টা করে দেখেছেন?
হিরোশি

20

এটি কাজ করে, তবে এটি পূর্ববর্তী আইটেমটির শিরোনাম সরিয়ে ফেলবে, এমনকি আপনি যদি এটিতে পপ করেন তবে:

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

এই সম্পত্তিটি কেবল viewDidLoadধাক্কা দেওয়া দেখুন নিয়ন্ত্রকের উপর সেট করুন ।


17
এটি পূর্ববর্তী আইটেমটির শিরোনাম সরিয়ে ফেলবে, এমনকি আপনি এটিতে পপ করলেও। খুব ভাল নয় :(
আন্তজি

আমি পুশিং ভিসির শিরোনাম সেট করেছি viewWillAppearতাই এটি সর্বদা সঠিকভাবে সেট করা থাকে।
গুটো আরাউজো

@ গুটোআরাউজো এটি কাজ করে তবে শিরোনামটি 1 বা 2 সেকেন্ড বিলম্ব ডাইনির সাথে পুনরায় প্রদর্শিত ইউএক্সকে খুব ভাল করে না।
ফুয়াইই

XCode8 -> ios10.X এ সমস্যাটি সমাধান করার একমাত্র উপায় বলে মনে হচ্ছে
লুসিওবি

12

আমি এটি এটি করি এবং সবচেয়ে সহজ, কাজ করে এবং এটি করার সবচেয়ে সুস্পষ্ট উপায়।

এম্বেড থাকলে এটি কাজ করে Navigation Controller

সুইফট 3

ইন viewDidLoadআমি ভিউ নিয়ামক এই যোগ করেন তারা আপনার ব্যাক বোতাম মাত্র তীর হতে চান।

if let topItem = self.navigationController?.navigationBar.topItem {
   topItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

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


7

আপনি যেভাবে চান নেভিগেশন ব্যাকবটন আইটেমটিতে অ্যাক্সেস পাবেন না, আপনাকে নীচের মতো নিজের ব্যাক বোতামটি তৈরি করতে হবে:

- (void)loadView
{
    [super loadView];
    UIButton *backButton = [[UIButton alloc] initWithFrame: CGRectMake(0, 0, 44.0f, 30.0f)];
    [backButton setImage:[UIImage imageNamed:@"back.png"]  forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(popVC) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
}

এবং অবশ্যই:

- (void) popVC{
  [self.navigationController popViewControllerAnimated:YES];
}

তারপরে আমরা হারিয়ে
গেলাম

3
মসৃণ রূপান্তরগুলির জন্য আপনার একটি মুখোশ দরকার। "* আপনি যদি ডিফল্ট শেভ্রন প্রতিস্থাপন করতে একটি কাস্টম চিত্র ব্যবহার করতে চান তবে আপনাকে একটি কাস্টম মাস্ক চিত্রও তৈরি করতে হবে। আইওএস 7 মাস্কটি ব্যবহার করে পূর্ববর্তী স্ক্রিনের শিরোনামটি নেভিগেশন চলাকালীন শেভ্রন থেকে উদ্ভূত বা অদৃশ্য হয়ে যায় make ট্রানজিশন। "
ব্যবহারকারী

3
@ নল আপনি আইওএস 7 এর পাশাপাশি-পাশের সোয়াইপ অঙ্গভঙ্গিটি হারাবেন!
মাজন কাসের 31:13

@ ব্যবহারকারী আমি কাস্টম চিত্রটি পাই তবে রঙিন রঙটি ডিফল্টভাবে নীল। আমি কীভাবে কোনও আভা যুক্ত করতে পারি না? ধন্যবাদ
মাজন কাসের

7

লক্ষ্য:UINavigationBar একটি সাদা আইকনে সমস্ত পিছনে বোতামটি কাস্টমাইজ করে

পদক্ষেপ: ১. অ্যাপডিলিটের "ফিনিশলঞ্চিং উইথঅপশনস" পদ্ধতিতে :

UIImage *backBtnIcon = [UIImage imageNamed:@"navBackBtn"];


if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
    [UINavigationBar appearance].tintColor = [UIColor whiteColor];
    [UINavigationBar appearance].backIndicatorImage = backBtnIcon;
    [UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon;
}else{

    UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];
}

2. viewDidLoadসাধারণ সুপার ViewControllerক্লাসের পদ্ধতিতে :

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
        UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                     style:UIBarButtonItemStylePlain
                                                                    target:nil
                                                                    action:nil];
        [self.navigationItem setBackBarButtonItem:backItem];
    }else{
        //do nothing
    }

এটি একটি সতর্কতা দেখায় "SYSTEM_VESION _... এর অন্তর্নিহিত সংস্করণ" C99 এ অবৈধ।
জয়প্রকাশ দুবে

7

সুইফট 4

কাস্টম ব্যাক বোতাম তৈরি করার পাশাপাশি তাদের শিরোনাম মুছে ফেলার জন্য যারা সন্ধান করছেন তাদের জন্য দয়া করে নতুন নিয়ন্ত্রণকারী ভিউ কন্ট্রোলারের মধ্যে নিম্নলিখিত কোডের টুকরোটি ব্যবহার করুন:

self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "close")
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "close")
self.navigationItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

আরও সার্বজনীন ব্যবহারের জন্য, নিম্নলিখিতটি করুন:

  1. নিম্নলিখিত হিসাবে একটি সর্বজনীন ফাংশন তৈরি করুন:

    func addCustomizedBackBtn(navigationController: UINavigationController?, navigationItem: UINavigationItem?) {
        navigationController?.navigationBar.backIndicatorImage = UIImage(named: "close")
        navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "close")
        navigationItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
  2. তারপরে এটি নিচের মত দৃশ্যের নিয়ামকগুলিতে ব্যবহার করুন:

    addCustomizedBackBtn(navigationController: self.navigationController, navigationItem: self.navigationItem)

6

আইওএস 6 থেকে সরল হ্যাক আইওএস 7-তেও কাজ করে:

[UIBarButtonItem.appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];

সম্পাদনা: এই হ্যাক ব্যবহার করবেন না। বিশদ জন্য মন্তব্য দেখুন।


6
এই হ্যাক ব্যবহার করবেন না। Bit৪ বিট ডিভাইসে অ্যাপলের কোডে একটি বাগ রয়েছে যা আপনি যখন বার বার বোতামের শিরোনাম অফসেট করেন তখন মডেল ভিউগুলি উপস্থিত হতে বাধা দেবে। আরও বিশদ
zh।

ঠিক আছে ডিভাইসে কেবল সমস্যা ছিল, সিমুলেটার নয়।
zh।

এক্সকোড 9 / আইওএস 11 দিয়ে নির্মিত হলে এই হ্যাকটি আর কাজ করে না The
টি'পল

3

আপনি এটি ব্যবহার করতে পারেন। এটির জন্য কেবলমাত্র UIButtonএকটি কাস্টমভিউ হিসাবে যুক্ত করে আমার পক্ষে পুরোপুরি কাজ করেUIBarButtonItem

নীচে কোড চেষ্টা করুন

    self.navigationItem.leftBarButtonItem=[self backButton];


- (UIBarButtonItem *)backButton
{
    UIImage *image = [UIImage imageNamed:@"back-btn.png"];
    CGRect buttonFrame = CGRectMake(0, 0, image.size.width, image.size.height);

    UIButton *button = [[UIButton alloc] initWithFrame:buttonFrame];
    [button addTarget:self action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [button setImage:image forState:UIControlStateNormal];

    UIBarButtonItem *item= [[UIBarButtonItem alloc] initWithCustomView:button];

    return item;
}

3
তবে এটি আইওএস 7
ব্যবহারকারী 102008

3

UILabelআপনার রুট ভিউ কন্ট্রোলারের জন্য আপনি যে শিরোনাম চান তা তৈরি করুন এবং এটিকে ভিউ কন্ট্রোলারের জন্য বরাদ্দ করুন navigationItem.titleView

এখন শিরোনামটি একটি খালি স্ট্রিংয়ে সেট করুন এবং আপনার পরবর্তী ধাপের নিয়ামকটির কাছে টেক্সট ব্যতীত একটি পিছনের বোতাম থাকবে।

self.navigationItem.titleView = titleLabel; //Assuming you've created titleLabel above
self.title = @"";

3
 // add left bar button item

try this code:

- (void)viewDidLoad
{ 
    [super viewDidLoad];

   UIImage* image_back = [UIImage imageNamed:@"your_leftarrowImage.png"];
    CGRect backframe = CGRectMake(250, 9, 15,21);
    UIButton *backbutton = [[UIButton alloc] initWithFrame:backframe];
    [backbutton setBackgroundImage:image_back forState:UIControlStateNormal];
    [backbutton addTarget:self action:@selector(Btn_back:)
         forControlEvents:UIControlEventTouchUpInside];
    [backbutton setShowsTouchWhenHighlighted:YES];
    UIBarButtonItem *backbarbutton =[[UIBarButtonItem alloc] initWithCustomView:backbutton];
    self.navigationItem.leftBarButtonItem=backbarbutton;
    [backbutton release];

}
-(IBAction)Btn_back:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];

}

3

সমস্ত উত্তর সমস্যার সমাধান করে না। প্রতিটি ভিউ কন্ট্রোলারে ব্যাক বাটন শিরোনাম সেট করা এবং শিরোনামে অফসেট যুক্ত করা পরবর্তী পাতায় নিয়ন্ত্রকের শিরোনামটি ডানদিকে স্থানান্তরিত করে গ্রহণযোগ্য নয়।

পদ্ধতিটি সুইজলিংয়ের পদ্ধতিটি এখানে রয়েছে, কেবল ইউআইএনএভিগেশন আইটেমটিতে নতুন এক্সটেনশন তৈরি করুন

import UIKit

extension UINavigationItem {
    public override class func initialize() {

    struct Static {
        static var token: dispatch_once_t = 0
    }

    // make sure this isn't a subclass
    if self !== UINavigationItem.self {
        return
    }

    dispatch_once(&Static.token) {
        let originalSelector = Selector("backBarButtonItem")
        let swizzledSelector = #selector(UINavigationItem.noTitleBackBarButtonItem)

        let originalMethod = class_getInstanceMethod(self, originalSelector)
        let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)

        let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))

        if didAddMethod {
            class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
        } else {
            method_exchangeImplementations(originalMethod, swizzledMethod)
        }
    }
}

// MARK: - Method Swizzling

struct AssociatedKeys {
    static var ArrowBackButtonKey = "noTitleArrowBackButtonKey"
}

func noTitleBackBarButtonItem() -> UIBarButtonItem? {
    if let item = self.noTitleBackBarButtonItem() {
        return item
    }

    if let item = objc_getAssociatedObject(self, &AssociatedKeys.ArrowBackButtonKey) as? UIBarButtonItem {
        return item
    } else {
        let newItem = UIBarButtonItem(title: " ", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
        objc_setAssociatedObject(self, &AssociatedKeys.ArrowBackButtonKey, newItem as UIBarButtonItem?, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        return newItem
    }
}
}

পিছনে শব্দের পিছনে বাটন সেট করুন, দুর্দান্ত কাজ করে: self.navicationItem.backBarButtonItem.title = @ "পিছনে";
মাইক জ্রিয়েল

সাথীর মানে কী? প্রশ্নটি ছিল পিছনের বোতাম থেকে পাঠ্য অপসারণ সম্পর্কে?
জাকুব ওলানস্কি

1
প্রচুর অ্যাপ এবং অ্যাপলের নিজস্ব অ্যাপ্লিকেশনগুলি "<পিছনে" বলে, তাই মানকে আটকে রাখা ভাল। বিগটেকএওয়ে এবং জাস্ট ইট।
মাইক জ্রিয়েল

2

আমি নিচের কোডটি ভিডলিডে প্রয়োগ করেছি এবং এটি কাজ করে:

  // this will set the back button title
self.navigationController.navigationBar.topItem.title = @"Test";

 // this line set the back button and default icon color  

//[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];

this line change the back default icon to your custom icon
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"menuicon"]]];

কেবল আপডেট করতে আমি ভেক্টর আইকনটি ব্যবহার করি


2

আপনি ইউআইএনএভিগেশন কন্ট্রোলারকে সাবক্লাস করতে পারেন, নিজেকে প্রতিনিধি হিসাবে সেট করতে পারেন এবং প্রতিনিধি পদ্ধতিতে ব্যাকবার্ট বাটন আইটেম সেট করতে পারেন navigationController:willShowViewController:animated:

@interface Custom_NavigationController : UINavigationController <UINavigationControllerDelegate>

@end

@implementation Custom_NavigationController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.delegate = self;
}

#pragma mark - UINavigationControllerDelegate

- (void)navigationController:(UINavigationController *)navigationController     willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}

@end

2

শিরোনাম খালি সেট করুন

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@""  style:UIBarButtonItemStyleDone target:self action:@selector(handleBack:)];
[backButton setTintColor:Color_WHITE];
[self.navigationItem setBackBarButtonItem:backButton];

পিছনে চিত্র পরিবর্তন করুন

 UIImage *backImg = [[UIImage imageNamed:@"ic_back_white"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[UINavigationBar appearance].backIndicatorImage = backImg;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = backImg;

1

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

void updateBackButtonTextForViewController(UIViewController *viewController, NSString *text)
{
    if(! viewController.navigationItem.backBarButtonItem)
    {
        viewController.navigationItem.backBarButtonItem =
        [[UIBarButtonItem alloc] initWithTitle:text
                                         style:UIBarButtonItemStylePlain
                                        target:nil action:nil];
    }
    else
    {
        viewController.navigationItem.backBarButtonItem.title = text;
    }
}

কিছু ক্ষেত্রে নেভিগেশন আইটেম ইতিমধ্যে বিদ্যমান থাকতে পারে, অন্য ক্ষেত্রে এটি তৈরি করা দরকার। এটি নেভিগেশন আইটেম শিরোনামের সাথে ঝামেলা ছাড়াই এই দুটি ক্ষেত্রেই অ্যাকাউন্টস accounts এটি আপনাকে কেবল প্রবেশ করে শিরোনাম সরাতে দেয় @""


1
এটা সঠিক উত্তর. কোন কৌশল নয়। এটি শিরোনাম সেট করার জন্য, কেবলমাত্র আইওএস এপিআই ব্যবহার করা হচ্ছিল। শিরোনাম সরানোর জন্য এটি "" "এ সেট করুন (পরীক্ষিত এবং সূক্ষ্মভাবে কাজ করে)।
n13

1

আমার পক্ষে কাজ করার একমাত্র উপায় ছিল:

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

হালনাগাদ:

আমি যখন সিগ অ্যানিমেশন পতাকাটিকে সত্যে পরিবর্তন করেছি (এটি আগে মিথ্যা ছিল) তখন আমার পক্ষে কাজ করার একমাত্র উপায় ছিল:

navigationController?.navigationBar.topItem?.title = ""

1

আপনার যদি দুটি ভিউকন্ট্রোলার (ফার্স্টভিসি, সেকেন্ডভিসি) নেভিগেশন কন্ট্রোলারে এম্বেড থাকে এবং আপনি চান যে সেকেন্ডভিসিতে কেবল পিছনের তীর রয়েছে।

আপনি এটি ফার্স্টভিসির ভিউডিডডলোডে চেষ্টা করতে পারেন

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
}

তারপরে আপনি যখন সেকেন্ডভিসিতে প্রবেশ করবেন তখন আপনি দেখতে পাবেন সেখানে কেবল পিছনের তীর রয়েছে


1

আপনি যদি নেভিগেশনবারের টিন্ট কালার সেট করেন, শিরোনাম ব্যতীত একটি কাস্টম ব্যাক বাটন চিত্র যুক্ত করুন যে রঙের রঙ চিত্রের রঙ প্রতিফলিত করবে। দয়া করে এই আপেল ডকুমেন্টঅন লিঙ্কটি অনুসরণ করুন।

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/index.html#//apple_ref/doc/uid/TP40012857-UIView-SW7

UINavigationItem *navItem = [[UINavigationItem alloc] init];
   navBar.tintColor = self.tintColor;

   UIImage *myImage = [UIImage imageNamed:@"left_arrow.png"];
     myImage = [myImage              imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

     UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithImage:myImage style:UIBarButtonItemStylePlain target:self action:@selector(cancelButtonFunction:)];
     navItem.leftBarButtonItem = leftButton;

    navBar.items = @[ navItem ];

1

এই উত্তরটি পরীক্ষা করুন

কীভাবে ইউআইএনএভিগেশন কন্ট্রোলার ব্যাক বোতামের নাম পরিবর্তন করবেন?

নীচের মতো একটি ফাঁকা জায়গা রেখে titleপাঠ্য সেট করুনstring

title = " "

মন্তব্য যুক্ত করার মতো পর্যাপ্ত খ্যাতি নেই :)


1

এটিকে আরও সহজ করতে আমি একটি এক্সটেনশান লিখেছি:

extension UIViewController {

    /// Convenience for setting the back button, which will be used on any view controller that this one pushes onto the stack
    @objc var backButtonTitle: String? {
        get {
            return navigationItem.backBarButtonItem?.title
        }
        set {
            if let existingBackBarButtonItem = navigationItem.backBarButtonItem {
                existingBackBarButtonItem.title = newValue
            }
            else {
                let newNavigationItem = UIBarButtonItem(title: newValue, style:.plain, target: nil, action: nil)
                navigationItem.backBarButtonItem = newNavigationItem
            }
        }
    }

}

1

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

-(void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.title = @"Previous Title";
}

-(void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.title = @"";
}

0

প্রস্তুতির ক্ষেত্রে: আপনার প্রথম ভিউ কন্ট্রোলারের পদ্ধতিতে আপনি সেই ভিউয়ের শিরোনাম @ "" এ সেট করেছেন, সুতরাং পরবর্তী দর্শনটি ধাক্কা দিলে এটি পূর্ববর্তী ভিউকন্ট্রোলার শিরোনামটি প্রদর্শিত হবে যা @ "" হবে।

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    self.navigationItem.title = @" ";
}

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

-(void)viewWillAppear:(BOOL)animated{
   self.navigationItem.title = @"First View Title";
}

আমি এই সমাধানটি খুব পছন্দ করি না তবে এটি কাজ করে এবং আমি এটি করার অন্য কোনও উপায় খুঁজে পাই না।


নেভিগেশন আইটেম শিরোনামের সাথে গোলযোগ না করে সঠিক সমাধানের জন্য আমার উত্তর দেখুন।
ডিমা

আপনার সমাধান কি iOS7 এর পিছনে তীর রাখে? আমি অনুরূপ কিছু চেষ্টা করেছিলাম তবে এটি তীরটি সরিয়ে ফেলেছে।
আলেজান্দ্রো ফিগুয়েরো

এটি আইওএস 7 এর পিছনের তীরটি রাখে, হ্যাঁ। IOS 6 এ একটি ফাঁকা কথা প্রসঙ্গে (0 দৈর্ঘ্য) স্ট্রিং এছাড়াও বোতাম মুছে ফেলা হবে সম্পূর্ণরূপে যদিও, তাই এই এই কাজ শুধুমাত্র আইওএস 7-এর জন্য সত্যিই ভাল
দিমা

একটি খুব সহজ সমাধান আছে। আমার উত্তরটি আপনার পক্ষে কাজ করে কিনা দেখুন।
গুটো আরাউজো

0

উপরে টমাস সি এর উত্তর যুক্ত করতে , কখনও কখনও একটি একক স্থান স্থাপন কাজ করে না এবং আপনাকে স্পেস যোগ করতে হবে।

খালি বার বোতাম

আপনি জানতে পারবেন যে আপনি "নেভিগেশন আইটেম" এর অধীনে "বার বাটন আইটেম -" দেখলে আপনি সফল হয়েছেন। এটি ডকুমেন্ট আউটলাইনে রয়েছে (সম্পাদক-> দস্তাবেজ আউটলাইন দেখান)। উপরের ছবিটি একবার দেখলে আপনি কয়েকটি স্পেস মুছতে পারেন এবং দেখতে পান এটি এখনও কাজ করে কিনা।


0
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Custom initialization
        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

    }
    return self; 
}

কাইল বেজিম্যান যেমন করেন, আপনি উপরের কোডটি আপনার রুট ভিউ কন্ট্রোলারে যুক্ত করেন। সমস্ত সাব ভিউ কন্ট্রোলার প্রয়োগ করা হবে। অতিরিক্তভাবে, এটিকে initWithCoder: পদ্ধতিতে যুক্ত করে, আপনি xib, স্টোরিবোর্ড বা কোড ভিত্তিক পদ্ধতির মধ্যে রুট ভিউ নিয়ন্ত্রণকারীদের জন্য স্টাইল প্রয়োগ করতে পারেন।

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