আমি কীভাবে কোনও ইউআইএনএভিগেশন কন্ট্রোলার থেকে পিছনে বোতামের পাঠ্যটি আড়াল করতে পারি? আমার কাছে কেবল "<" থাকবে এবং "<পিছনে" থাকবে না
আমি কীভাবে কোনও ইউআইএনএভিগেশন কন্ট্রোলার থেকে পিছনে বোতামের পাঠ্যটি আড়াল করতে পারি? আমার কাছে কেবল "<" থাকবে এবং "<পিছনে" থাকবে না
উত্তর:
ইন্টারফেস বিল্ডারে আপনি পূর্ববর্তী নিয়ামকের নেভিগেশন আইটেমটি নির্বাচন Back Button
করতে পারেন এবং পিছনের বোতামটি যেভাবে প্রদর্শিত হবে তাতে স্ট্রিংটি পরিবর্তন করতে পারেন। যদি আপনি এটি ফাঁকা চান, উদাহরণস্বরূপ, কেবল একটি স্থান রাখুন।
আপনি এই কোডের এই লাইন দিয়ে এটি পরিবর্তন করতে পারেন :
[self.navigationItem.backBarButtonItem setTitle:@"Title here"];
বা সুইফটে :
self.navigationItem.backBarButtonItem?.title = ""
Back Button
আইবিতে ইতিমধ্যে ফাঁকা থাকে, তবে আরোহণের জন্য Back
কেবল একটি স্থান যুক্ত করুন এবং কেবল তীরটি দেখান।
আপনি স্টোরিবোর্ডের মাধ্যমে এটিও করতে পারেন। পূর্ববর্তী নিয়ামকের নেভিগেশন আইটেমের অ্যাট্রিবিউট ইন্সপেক্টরটিতে আপনি "" পিছনে বোতাম ক্ষেত্রে সেট করতে পারেন। নীচে চিত্র দেখুন। "আপনার শিরোনাম এখানে" "" এ প্রতিস্থাপন করুন। এটি করে আপনি পছন্দসই ফলাফল অর্জন করবেন। আপনাকে আর 'শিরোনাম' নিয়ে গণ্ডগোল করার দরকার নেই।
প্রোগ্রামিয়ালি আপনি ব্যবহার করতে পারে
[self.navigationItem.backBarButtonItem setTitle:@" "];
যেখানে স্ব নিয়ামক যা আপনার কাঙ্ক্ষিত দেখুন নিয়ামক পাহাড় জমে বোঝায়।
আগে নেভিগেশন বার পরে নমুনা
আগে
পরে
backBarButtonItem
প্রোগ্রামিমেটিকভাবে সেট করা কাজ করে না, তবে স্টোরিবোর্ডের মাধ্যমে সেটি নির্ধারণ করে।
আপনি এর UINavigationControllerDelegate
মতো বাস্তবায়ন করতে পারেন :
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
viewController.navigationItem.backBarButtonItem = item
}
class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
let item = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
viewController.navigationItem.backBarButtonItem = item
}
}
backBarButtonItem
এটি nil
ডিফল্টরূপে হয় এবং এটি পরবর্তী ধাক্কা নিয়ামককে প্রভাবিত করে, সুতরাং আপনি এটি কেবলমাত্র সমস্ত নিয়ামকের জন্য সেট করে
পিছনে বোতামের শিরোনাম সেট করা @""
বা nil
কাজ করবে না। আপনাকে পুরো বোতামটি খালি সেট করতে হবে (শিরোনাম বা চিত্র ছাড়াই):
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
এটি নেভিগেশন স্ট্যাকের আপনার ভিউ কন্ট্রোলারের শীর্ষে থাকা ভিউ কন্ট্রোলারে করা উচিত (উদাহরণস্বরূপ যেখানে আপনি pushViewController
পদ্ধতির মাধ্যমে আপনার ভিসিতে যান )
পরিস্থিতিগুলির জন্য যেখানে আপনার কাছে দুর্দান্ত নিয়ন্ত্রণের একটি দুর্দান্ত চুক্তি রয়েছে তার আর একটি সমাধান হ'ল UIAppearance
ব্যাক বোতাম শিরোনামের পাঠ্যটি কার্যকরভাবে আড়াল করার জন্য একটি প্রক্সি ব্যবহার করা :
UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];
[navBarButtonAppearance setTitleTextAttributes:@{
NSFontAttributeName: [UIFont systemFontOfSize:0.1],
NSForegroundColorAttributeName: [UIColor clearColor] }
forState:UIControlStateNormal];
এই সমাধানটি পাঠ্যটিকে একটি ছোট্ট স্পষ্ট বিন্দু হিসাবে ম্যানুয়ালি ব্যাক বোতামের শিরোনামটি সেট করার অনুরূপ হিসাবে রেন্ডার করবে @" "
, এটি সমস্ত এনএভি বারের প্রভাবিত করে।
আমি এটিকে সমস্যার সাধারণ সমাধান হিসাবে প্রস্তাব দিচ্ছি না কারণ এটি সমস্ত নেভিগেশন বারের বোতামকে প্রভাবিত করে। এটি দৃষ্টান্তটি ফ্লিপ করে যাতে আপনি বাটন শিরোনামগুলি প্রদর্শন করার পরিবর্তে বেছে নেবেন আড়াল না to
শিরোনামগুলি কখন প্রদর্শিত হবে তা চয়ন করতে হয় প্রয়োজন অনুসারে ম্যানুয়ালি শিরোনাম পাঠ্যের বৈশিষ্ট্য পুনরুদ্ধার করুন বা এর একটি বিশেষায়িত সাবক্লাস তৈরি করুন UIBarButtonItem
এটির (সম্ভবত অন্য একটি UIAppearance
প্রক্সি সহ)।
আপনার যদি এমন একটি অ্যাপ থাকে যেখানে বেশিরভাগ পিছনের বোতামের শিরোনামগুলি লুকিয়ে রাখা দরকার হয় এবং নেভ বোতামগুলির মধ্যে কেবল কয়েকটি (বা কিছুই নয়) শিরোনামযুক্ত সিস্টেম বোতাম হয় তবে এটি আপনার পক্ষে হতে পারে!
(দ্রষ্টব্য: দীর্ঘ শিরোনাম যাতে কেন্দ্রের এনএভি বারের শিরোনামটি স্থানান্তরিত না করে তা নিশ্চিত করার জন্য পাঠ্যের রঙ পরিষ্কার হওয়া সত্ত্বেও ফন্টের আকারের পরিবর্তন প্রয়োজন)
ভিডডিলোড বা লোডভিউতে নিম্নলিখিত কোডটি যুক্ত করুন
self.navigationController.navigationBar.topItem.title = @"";
আমি এটি আইওএস 9 এর সাথে আইফোন এবং আইপ্যাডে পরীক্ষা করেছি
কোনও নেভিগেশন নিয়ামক দ্বারা তৈরি সমস্ত "পিছনে" বোতামগুলির কোনও পাঠ্য নেই তা করতে আপনি এই উদ্দেশ্য-সি বিভাগ যুক্ত করতে পারেন। আমি কেবল এটি আমার অ্যাপডেলিগেট.এম ফাইলটিতে যুক্ত করেছি।
@implementation UINavigationItem (Customization)
/**
Removes text from all default back buttons so only the arrow or custom image shows up.
*/
-(UIBarButtonItem *)backBarButtonItem
{
return [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}
@end
পিএস - (সুইফট দিয়ে এই এক্সটেনশানটি কীভাবে কাজ করা যায় তা আমি জানি না, এতে অদ্ভুত ত্রুটি হয়েছিল।
override
দ্রুত গতিতে এটি কিভাবে । খুব আকর্ষণীয় প্রশ্ন
আমি উপরে এবং নীচে কিছু চেষ্টা করেছি কিন্তু তারা কার্যকর হয়নি। এটি আমার পক্ষে কাজ করেছে:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.topItem?.title = ""
}
কোনও পার্শ্ব-প্রতিক্রিয়া নিয়ে কাজ করে না এমন একমাত্র কাস্টম ব্যাক বোতাম তৈরি করা। যতক্ষণ না আপনি কোনও কাস্টম অ্যাকশন সরবরাহ করবেন না, এমনকি স্লাইড অঙ্গভঙ্গিও কাজ করে।
extension UIViewController {
func setupBackButton() {
let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = customBackButton
}}
দুর্ভাগ্যক্রমে, আপনি যদি কোনও শিরোনাম না রাখার পিছনে সমস্ত ব্যাক বোতাম চান তবে আপনার সমস্ত দর্শনীয় নিয়ন্ত্রকদের এই কাস্টম ব্যাক বোতামটি সেটআপ করতে হবে: /
override func viewDidLoad() {
super.viewDidLoad()
setupBackButton()
}
আপনি শিরোনাম হিসাবে একটি শ্বেত স্পেস সেট করুন এবং খালি স্ট্রিং নয় এটি অত্যন্ত গুরুত্বপূর্ণ।
প্রোগ্রামটির ভিত্তিতে ব্যাকবটন থেকে পাঠ্য অপসারণ করতে কোডের নীচে ব্যবহৃত এটি xcode7 এবং উপরে রূপে কাজ করবে।
self.navicationController.navicationBar.topItem.title = @ "";
বা
স্টোরিবোর্ডগুলিতে ম্যানুয়াললি, ভিউ কন্ট্রোলারে নেভিগেশন বারটি নির্বাচন করুন এবং "" পিছনে বোতামের পাঠ্যে রাখুন।
এটি কাজ করবে। ধন্যবাদ
self.navigationController?.navigationBar.topItem?.title = " "
এক্সকোড 9 এ এবং কাজ করেছেন!
বর্তমান উত্তরটি কাজ করছে না। আমি শিরোনাম পুরোপুরি মুছে ফেলতে চেয়েছিলাম , তবুও "পিছনে" পাঠ্যটি চলে যাচ্ছিল না।
পূর্ববর্তী ভিউ নিয়ন্ত্রকের কাছে ফিরে যান এবং এর শিরোনাম সম্পত্তি সেট করুন:
self.title = @" ";
কেবলমাত্র পূর্ববর্তী ভিউ কন্ট্রোলারের শিরোনাম না থাকলে কেবল কাজ করে
@""
।
বিকল্প উপায় - কাস্টম নেভিগেশনবার বর্গ ব্যবহার করুন।
class NavigationBar: UINavigationBar {
var hideBackItem = true
private let emptyTitle = ""
override func layoutSubviews() {
if let `topItem` = topItem,
topItem.backBarButtonItem?.title != emptyTitle,
hideBackItem {
topItem.backBarButtonItem = UIBarButtonItem(title: emptyTitle, style: .plain, target: nil, action: nil)
}
super.layoutSubviews()
}
}
এটি হ'ল এটি পুরো প্রকল্পটির শিরোনাম ফিরে দেয়। ইউআইএনএভিগেশন কন্ট্রোলারের জন্য কেবল কাস্টম ক্লাস সেট করুন।
স্থানের সাথে "" স্ট্রিংয়ে পূর্ববর্তী ভিসির শিরোনাম সেট করুন। এবং পিছনের বোতামের সাথে শিরোনাম একক স্পেস স্ট্রিংয়ের সাথে প্রতিস্থাপন করা হবে।
Self.title = " "
পিছনে টিপুন আবার ভিউইলঅপিয়ারে শিরোনামটি মূলটিকে পুনরায় সেট করুন।
NavigationController
ওভাররাইড করে এমন একটি কাস্টম ব্যবহার করুনpushViewController
class NavigationController: UINavigationController {
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
viewController.navigationItem.backBarButtonItem =
UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
super.pushViewController(viewController, animated: animated)
}
}
ইতিমধ্যে প্রচুর উত্তর, বিষয়টিতে আমার দুটি সেন্ট এখানে। আমি এই পদ্ধতির সত্যিই দৃust়। সিগু করার আগে আপনার কেবল ভিউকন্ট্রোলারে এটি রাখা দরকার।
সুইফট 4:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
আমি এই পোস্টে সবকিছু চেষ্টা করেছি। একমাত্র কার্যকরী সমাধানটি হ'ল @ ভয়েডলেস
এখানে একই উত্তর কিন্তু আরও সম্পূর্ণ
class CustomNavigationController: UINavigationController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.delegate = self
}
}
// MARK:UINavigationControllerDelegate
extension CustomNavigationController {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}
}
এটি আইওএস 11 এর জন্য আমার রেজোলিউশন, আমি অ্যাপ্লিকেশনটিতে ইউআইবারবারটন আইটেমটির চেহারা পরিবর্তন করবডিডফিনিশ লঞ্চিং উইথঅ্যাপশনগুলি:
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-100, 0), for:UIBarMetrics.default)
আপনি ওয়াই অফসেট পরিবর্তন করতে পারবেন না, কারণ এটি আইওএস 11 এও ব্যাক বারের বোতামের অবস্থান পরিবর্তন করবে, তবে এটি আইওএস 10 এবং নীচে ঠিক আছে।
সুইফট ৩.১ আপনি ইউআইএনএভিগেশন কন্ট্রোলারের প্রতিনিধি পদ্ধতিটি প্রয়োগ করে এটি করতে পারেন।
func navigationController(_ navigationController: UINavigationController,
willShow viewController: UIViewController, animated: Bool) {
/** It'll hide the Title with back button only,
** we'll still get the back arrow image and default functionality.
*/
let item = UIBarButtonItem(title: " ", style: .plain, target: nil,
action: nil)
viewController.navigationItem.backBarButtonItem = item
}
সুইফট 3 এ,
আপনি যদি বিশ্বব্যাপী সেটিংস সেট করেন
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// ..
let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
// ...
}
যারা বিশ্বব্যাপী পিছনে বোতামের শিরোনামটি আড়াল করতে চান তাদের জন্য।
আপনি পাঁচমিশালী মদ্যবিশেষ করতে viewDidLoad
এর UIViewController
ভালো।
+ (void)overrideBackButtonTitle {
NSError *error;
// I use `Aspects` for easier swizzling.
[UIViewController aspect_hookSelector:@selector(viewDidLoad)
withOptions:AspectPositionBefore
usingBlock:^(id<AspectInfo> aspectInfo)
{
UIViewController *vc = (UIViewController *)aspectInfo.instance;
// Check whether this class is my app's view controller or not.
// We don't want to override this for Apple's view controllers,
// or view controllers from external framework.
NSString *className = NSStringFromClass([vc class]);
Class class = [NSBundle.mainBundle classNamed:className];
if (!class) {
return;
}
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
vc.navigationItem.backBarButtonItem = backButton;
} error:&error];
if (error) {
NSLog(@"%s error: %@", __FUNCTION__, error.localizedDescription);
}
}
ব্যবহার:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[self class] overrideBackButtonTitle];
return YES;
}
আমি এটির সাথে লড়াই করছিলাম কারণ আমার একটি কাস্টম নেভিগেশন নিয়ামক ছিল। আমি আমার কাস্টম নেভিগেশন নিয়ামক শ্রেণিতে এই কোড সহ সমস্ত দর্শন নিয়ন্ত্রকদের পিছনে আইটেমের পাঠ্য সরাতে সক্ষম হয়েছি
override func viewDidLayoutSubviews() {
self.navigationBar.backItem?.title = ""
}
এটি এই কাস্টম নেভিগেশন নিয়ামক ব্যবহার করে পিছনে আইটেমের সমস্ত শিরোনাম সরিয়ে দেয়।
আপনি লক্ষ্য করে থাকেন তবে আইওএস 13 এবং পরে আপনি ব্যবহার করতে পারেন এই নতুন API থেকে বিশ্বব্যাপী ব্যাক বোতাম শিরোনাম লুকিয়ে ।
let backButtonAppearance = UIBarButtonItemAppearance()
backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]
UINavigationBar.appearance().standardAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().compactAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().scrollEdgeAppearance.backButtonAppearance = backButtonAppearance
আইওএস ১১-তে আমরা দেখতে পেলাম যে UIBarButtonItem
উপস্থিতির পাঠ্য ফন্ট / রঙকে খুব সামান্য মান বা পরিষ্কার রঙে সেট করার ফলে অন্যান্য বার আইটেমগুলি অদৃশ্য হয়ে যাবে (সিস্টেমটি আর UIBarButton আইটেমটির শ্রেণি সম্মান করে না, এটি এটিকে রূপান্তর করবে_UIModernBarButton
)। এছাড়াও অফস্ক্রিনে ব্যাক টেক্সটের অফসেট সেট করার ফলে ইন্টারেক্টিভ পপ চলাকালীন ফ্ল্যাশ হবে।
সুতরাং আমরা swizzled addSubView
:
+ (void)load {
if (@available(iOS 11, *)) {
[NSClassFromString(@"_UIBackButtonContainerView") jr_swizzleMethod:@selector(addSubview:) withMethod:@selector(MyiOS11BackButtonNoTextTrick_addSubview:) error:nil];
}
}
- (void)MyiOS11BackButtonNoTextTrick_addSubview:(UIView *)view {
view.alpha = 0;
if ([view isKindOfClass:[UIButton class]]) {
UIButton *button = (id)view;
[button setTitle:@" " forState:UIControlStateNormal];
}
[self MyiOS11BackButtonNoTextTrick_addSubview:view];
}
-(void)setNavigationItems{
UIBarButtonItem *leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"**Your title here**" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonClicked)];
self.navigationController.navigationBar.topItem.backBarButtonItem=leftBarButtonItem;
}
-(void)backButtonClicked{
[self.navigationController popViewControllerAnimated:YES];
}
পিছনের পাঠ্যটি সর্বশেষ ভিউ কন্ট্রোলারের from থেকে আসে navigationItem.title
এবং navigationItem.title
স্বয়ংক্রিয়ভাবে সেট হয়ে থাকে self.title
। সমস্যা সমাধানের সহজ উপায় হুক setTitle:
sure নিশ্চিত করুনnavigationItem.title = @""
এই কোডটি AppDelegate.m
রাখলে এটি ঠিক হয়ে যাবে。
[UIViewController aspect_hookSelector:@selector(setTitle:)
withOptions:AspectPositionAfter
usingBlock:^(id<AspectInfo> aspectInfo, NSString *title) {
UIViewController *vc = aspectInfo.instance;
vc.navigationItem.titleView = ({
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
titleLabel.text = title;
titleLabel;
});
vc.navigationItem.title = @"";
} error:NULL];
Https://www.jianshu.com/p/071bc50f1475(সরল চিনায়েসে আরও বিশদ
এক্সকোড 11.5 সুইফট 5
একটি খুব সহজ - যদিও সম্ভবত কিছুটা হ্যাকি - যদি আপনার কাস্টম ব্যাক বোতামের প্রয়োজন না হয় তবে প্রোগ্রাম্যিকভাবে এটি করার উপায় হ'ল ফন্টের আকারটি শূন্যের সমান সেট করা ভিউ কন্ট্রোলারে আপনি স্ট্যাকের উপরে চাপ দিচ্ছেন, এই জাতীয় কিছু বলছেন this ভিউডিডলড থেকে
private func setupNavBar() {
let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
let backButtonAppearance = UIBarButtonItemAppearance()
backButtonAppearance.normal.titleTextAttributes = [.font: UIFont(name: "Arial", size: 0)!]
appearance.backButtonAppearance = backButtonAppearance
navigationItem.standardAppearance = appearance
navigationItem.scrollEdgeAppearance = appearance
navigationItem.compactAppearance = appearance
}
অবশেষে পুরো অ্যাপ্লিকেশনে ডিফল্ট ব্যাক পাঠ্য গোপন করার নিখুঁত সমাধান খুঁজে পেল।
কেবলমাত্র একটি স্বচ্ছ চিত্র যুক্ত করুন এবং আপনার অ্যাপডেলিজেটে নিম্নলিখিত কোড যুক্ত করুন।
UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
নিম্নলিখিত পদ্ধতিটি আইওএস 11 এ কাজ করে এবং অন্যান্য আইওএস সংস্করণে ক্রাশ না করা নিরাপদ। এটি করার ফলে অ্যাপ্লিকেশন স্টোর পর্যালোচনাতে আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করা হতে পারে যেহেতু ইউআইএমডারনবার্ট বাটন এবং ইউআইব্যাকবটনকন্টেইনর ভিউ উভয়ই ব্যক্তিগত API API অ্যাপডেলিগেটে রাখুন।
if
let UIModernBarButton = NSClassFromString("_UIModernBarButton") as? UIButton.Type,
let UIBackButtonContainerView = NSClassFromString("_UIBackButtonContainerView") as? UIView.Type {
let backButton = UIModernBarButton.appearance(whenContainedInInstancesOf: [UIBackButtonContainerView.self])
backButton.setTitleColor(.clear, for: .normal)
}
এটি আমার xamarin.forms কোড থেকে, ক্লাস থেকে প্রাপ্ত NavigationRenderer
NavigationBar.Items.FirstOrDefault().BackBarButtonItem = new UIBarButtonItem( "", UIBarButtonItemStyle.Plain, null);