আমি কীভাবে কোনও ইউআইবারবারটন আইটেমটি প্রদর্শন / লুকিয়ে রাখব?


251

আমি বেশ কয়েকটি বোতাম সহ আইবিতে একটি সরঞ্জামদণ্ড তৈরি করেছি। আমি মূল উইন্ডোতে থাকা ডেটার স্থিতির উপর নির্ভর করে একটি বোতাম আড়াল / প্রদর্শন করতে সক্ষম হতে চাই।

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


আমি কেবল এটিকে অক্ষম করেছিলাম এবং একটি অ্যাক্সেসিবিলিটি লেবেল যুক্ত করে বললাম বোতামটির বৈশিষ্ট্যটি উপলভ্য নয়।
ড্যানিয়েল

উত্তর:


263

আপনার বোতামটি একটি শক্তিশালী আউটলেটে সংরক্ষণ করুন (আসুন এটি কল করুন myButton) এবং এটি যুক্ত / সরানোর জন্য এটি করুন:

// Get the reference to the current toolbar buttons
NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy];

// This is how you remove the button from the toolbar and animate it
[toolbarButtons removeObject:self.myButton];
[self setToolbarItems:toolbarButtons animated:YES];

// This is how you add the button to the toolbar and animate it
if (![toolbarButtons containsObject:self.myButton]) {
    // The following line adds the object to the end of the array.  
    // If you want to add the button somewhere else, use the `insertObject:atIndex:` 
    // method instead of the `addObject` method.
    [toolbarButtons addObject:self.myButton];
    [self setToolbarItems:toolbarButtons animated:YES];
}

যেহেতু এটি আউটলেটে সঞ্চিত রয়েছে, আপনি এটি সরঞ্জামদণ্ডে না থাকলেও এটিতে একটি রেফারেন্স রাখবেন।


73
কোনও ন্যাভিগেশন নিয়ন্ত্রকটিতে আমার ডান বোতামটির জন্য এই কাজটি করার জন্য আমি টুলবারটেটস এবং সেটটুলবার্ট আইটেমের পরিবর্তে স্ব.ব্যাভিগেশন আইটেম.সেটবার্ট বাটনআইটেমস এবং [স্ব-ন্যাভিগেশন আইটেম সেট রাইটবারবার বাটন আইটেমস <পিআরএম>] ব্যবহার করেছি।
মাইন্ডস্পিকার

@ মাইন্ডস্পিকার: হ্যাঁ, তিনি একই কৌশলটি নেভিগেশন বারের বোতামগুলির জন্যও কাজ করে।
lnafziger

1
আমাকে কি ডাবলোকে আমার বাটনটি নিলাম করতে হবে?
ভ্যান ডু ট্রান

48
অথবা অ্যাপল সবেমাত্র লুকিয়ে থাকা সম্পত্তি যুক্ত করতে পারত। -_-
জেনকোড

217

আমি জানি এই উত্তরটি এই প্রশ্নের জন্য দেরী। তবে অন্য কারও যদি একইরকম পরিস্থিতির মুখোমুখি হয় তবে এটি সাহায্য করতে পারে।

আইওএস 7-তে, একটি বার বোতাম আইটেমটি আড়াল করতে, আমরা নিম্নলিখিত দুটি কৌশল ব্যবহার করতে পারি: -

  • ব্যবহার SetTitleTextAttributes : - এটি "সম্পন্ন", "সংরক্ষণ করুন" ইত্যাদির মতো বার বোতাম আইটেমগুলিতে দুর্দান্ত কাজ করে তবে এটি পাঠ্য না থাকায় এটি অ্যাড, ট্র্যাশ প্রতীক ইত্যাদি (অন্ততপক্ষে আমার জন্য নয়) আইটেমগুলিতে কাজ করে না।
  • ব্যবহার TintColor: - আমার কাছে যদি "ডিলিটবটন" নামে একটি বার বোতাম আইটেম থাকে: -

বোতামটি আড়াল করতে, আমি নিম্নলিখিত কোডটি ব্যবহার করেছি: -

[self.deleteButton setEnabled:NO]; 
[self.deleteButton setTintColor: [UIColor clearColor]];

আবার বোতামটি দেখানোর জন্য আমি নীচের কোডটি ব্যবহার করেছি: -

[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];

[স্ব-নেভিগেশনআইটেম.সেটবারবার্টন আইটেম সেটইনবল: নেই]; [স্ব-নেভিগেশন আইটেম.টাইট বারবটন আইটেম সেটটিন্ট কালার: [ইউআইসি কালার ক্লিয়ার কালার]];
লিওন

3
সুইফ্টের জন্য: deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()অক্ষম করতে এবং আড়াল deleteButton.enabled = true; deleteButton.tintColor = nilকরতে এবং পুনরায় সক্ষম এবং সাধারণ হিসাবে প্রদর্শন করতে।
Unixmonkey

1
আমি পছন্দ করি যে এই পদ্ধতির সাহায্যে সেই ক্লাসের মধ্যে ইউআইবারবারটনটি প্রদর্শিত হবে কি না তার জন্য যুক্তি রাখতে পারি। এটি কেবল একটি বোতামের সাথে কাজ করার কারণটি তাত্ক্ষণিকভাবে স্পষ্ট নয় - কারণ আপনি যদি এইভাবে কোনও বোতামটি আড়াল করেন তবে এটি এখনও স্থান গ্রহণ করতে পারে, তাই আপনার যদি একাধিক বোতাম থাকে তবে আপনার ফাঁকা ফাঁক থাকতে পারে।
সিম্পলজি

আপনার প্রথম পদ্ধতির আমার জন্য নিখুঁত ছিল। আমি সেট UIColor.clearজন্য UIControlState.disabledএবং দেখাতে পারেন যে / বোতাম তার সঙ্গে আরো আড়াল setEnabled। অবশ্যই আপনি যেমন বলেছেন, এটি কেবল পাঠ্য বোতামগুলির জন্য কাজ করে।
fl034

যদি আমি এটির উপরে দীর্ঘক্ষণ চাপ না দেয় যতক্ষণ না এটি কোনও বড় চিত্রে পপ আপ হয় (সম্ভবত অ্যাক্সেসযোগ্যতার জন্য) তবে এটিএলড সেট থাকা সত্ত্বেও এটি এখনও কাজ করে না।
ড্যানিয়েল স্প্রিংগার

67

এখানে একটি সহজ পদ্ধতি:

hide:  barbuttonItem.width = 0.01;
show:  barbuttonItem.width = 0; //(0 defaults to normal button width, which is the width of the text)

আমি কেবল এটি আমার রেটিনা আইপ্যাডে চালিয়েছি এবং এটি প্রদর্শিত না হওয়ার জন্য .01 যথেষ্ট ছোট।


13
সমস্ত সমাধানগুলির মধ্যে, এটি দ্রুত, নোংরা এবং কার্যকর ছিল। আমি বারবটআইটেম.এনবলড = NO; যেহেতু আমি যথেষ্ট পরিমাণে চাপ দিলে আমি তখনও গুলি চালানোর বোতামটি পেতে পারি।
স্টিকলে

1
আমার জন্য কাজ করে না। আমি ভেবেছিলাম কারণ এটি আমি '+' চিত্রের সাথে একটি অ্যাড বোতামটি ব্যবহার করছিলাম তবে আমি পরিবর্তে "নতুন" পাঠ্য সহ একটি কাস্টম বোতামটি চেষ্টা করেছি এবং এটি এখনও নিখোঁজ হয় না। সক্ষমকরণটি পরিবর্তন হয় তাই আমি জানি যে আমার কোডটি কার্যকর করা হচ্ছে। কোন ধারনা? নোট করুন যে এই বোতামটি একটি স্টোরিবোর্ডে তৈরি হয়েছে এবং সেগ রয়েছে যাতে আমি পরিবর্তে কোনও প্রোগ্রামেটিক বোতামে পরিবর্তন আনতে চাই না
রবার্ব

19
এটি নেভিগেশন নিয়ামক সরঞ্জামদণ্ডে কাজ করছে বলে মনে হচ্ছে না, তবে এটি অন্যান্য সরঞ্জামদণ্ডগুলির জন্যও করে।
ড্রউ রোজেনবার্গ

3
এটি এটিকে আড়াল করে তবে এটি টেপগুলিতে সাড়া দেয়। আমার জন্য এটি অদৃশ্য বোতামের মতো কাজ করে।
টিবিডাবো

আপনি যদি এই লাইনটি self.window?.tintColor = APP_PRIMARY_COLORপ্রশংসাসূচকভাবে ব্যবহার করে বিশ্বব্যাপী রঙিন রঙ সেট করেন, তবে এটি কার্যকর হবে না
মেহুল ঠাকর

60

কোনও বাটনটি তার প্রস্থ পরিবর্তন না করে বা বার থেকে সরিয়ে না রেখে জায়গায় লুকানো সম্ভব। আপনি যদি স্টাইলটি প্লেইনে সেট করেন, শিরোনামটি সরিয়ে ফেলুন এবং বোতামটি অক্ষম করুন, এটি অদৃশ্য হয়ে যাবে। এটি পুনরুদ্ধার করতে, কেবল আপনার পরিবর্তনগুলি বিপরীত করুন।

-(void)toggleBarButton:(bool)show
{
    if (show) {
        btn.style = UIBarButtonItemStyleBordered;
        btn.enabled = true;
        btn.title = @"MyTitle";
    } else {
        btn.style = UIBarButtonItemStylePlain;
        btn.enabled = false;
        btn.title = nil;
    }
}

2
এটি কেবল btn.title = nil সেট করে আমার জন্য কাজ করেছে। আমি কেবল = সেক্ষেত্রে সক্ষম = নাও সেট করছি ...
শুকরের মাংস 'এন' বনি

3
বাটন আইটেম.টাইটেলটি শূন্য করতে সেট করা আইওএস 7-এ আমার পক্ষে কাজ করে না। সেটিংসটি সেট করার সময় বোতামটি পুনরায় প্রদর্শিত হয়নি। তবে কি কাজটি ছিল সেটিংটি বাটন আইটেম.টাইটেল = @ "" সেট করা ছিল;
মার্ক নপার

42

নীচে আমার সমাধানটি যদিও আমি এটি নেভিগেশন বারের জন্য খুঁজছিলাম।

navBar.topItem.rightBarButtonItem = nil;

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

এটি আপনার সমস্যার সাথে ঠিক প্রাসঙ্গিক নাও হতে পারে তবে আপনি নেভিগেশনবারে বোতামগুলি আড়াল করতে চাইলে অনুরূপ কিছু ঘটবে


আপনি যদি পরে rightBarButtonItemআবার সেট করতে চান তবে নিশ্চিত হয়ে নিন যে বোতামটি আইটেমটি একটি শক্তিশালী IBOutlet এ সঞ্চিত আছে যাতে আপনি এটি নেভিগেশন বার থেকে নামানোর সময় প্রকাশিত হয় না।
নেটে

30

সুইফ্ট 3 এবং সুইফ্ট 4-এর জন্য আপনি এটি লুকিয়ে রাখতে পারেন UIBarButtomItem:

self.deleteButton.isEnabled = false
self.deleteButton.tintColor = UIColor.clear

এবং এটি দেখানোর জন্য UIBarButtonItem:

self.deleteButton.isEnabled = true
self.deleteButton.tintColor = UIColor.blue

এর জন্য tintColorআপনাকে অবশ্যই মূল রঙটি নির্দিষ্ট করতে হবে যেটির জন্য আপনি ব্যবহার করছেনUIBarButtomItem


2
তবে এটি এখনও এই বোতামটির জন্য স্থান গ্রহণ করবে।
মাকালেলে

22

আমি বর্তমানে ওএস এক্স ইয়োসেমাইট বিকাশকারী পূর্বরূপ 7 এবং এক্সকোড 6 বিটা 6 চালিয়ে যাচ্ছি আইওএস 7.1 কে লক্ষ্য করে এবং নিম্নলিখিত সমাধানটি আমার পক্ষে কাজ করে:

  • UINavigationItemএবং UIBarButtonItemএর জন্য আউটলেট তৈরি করুন
  • অপসারণের জন্য নিম্নলিখিত কোডটি চালান

    [self.navItem setRightBarButtonItem:nil];
    [self.navItem setLeftBarButtonItem:nil];
  • আবার বোতাম যুক্ত করতে নিম্নলিখিত কোডগুলি চালান

    [self.navItem setRightBarButtonItem:deleteItem];
    [self.navItem setLeftBarButtonItem:addItem];

ধন্যবাদ, এটিও আমি খুঁজে পেয়েছি সেরা পদ্ধতি। আপনার বাটনে আপনার উল্লেখগুলি শক্তিশালী কিনা তা নিশ্চিত করুন।
jyoung

এছাড়াও, মনে রাখবেন যে যদি সেখানে কেবলমাত্র একটি বোতাম থাকে তবে এটি কাজ করে। উদাহরণটি সেই পাশের সমস্ত বোতাম সরিয়ে ফেলবে।
lnafziger

@ জাইউং এটি আমার পক্ষে কাজ করেছে, তবে রেফারেন্সটি শক্তিশালী হলে তা কেন গুরুত্বপূর্ণ? আমি অন্য উপায়ে চেষ্টা করিনি, তবে সাধারণত এটি সেট করা হয় না কারণ এটি ডিফল্ট নয়।
রবার্ট

@ রবার্ট আপনি পরের মুহূর্তে অবজেক্টটি ব্যবহার করতে চান, তাই আপনাকে নিশ্চিত করতে হবে যে আপনি যখন শূন্য করতে চান তখন অবজেক্টটি আবর্জনা সংগ্রহ করবেন না। আপনি বার বাটন আইটেমটি বলার সময় অন্য কিছু যদি অবজেক্টটি ধরে রাখে না তবে এটি থেকে মুক্তি পাওয়া উচিত, এটির রেফারেন্স গণনা 0 হবে এবং এটি আবর্জনা সংগ্রহ করা হবে।
jyoung

14

আমি আমার প্রকল্পে আইবিআউটলেট ব্যবহার করেছি। সুতরাং আমার সমাধানটি ছিল:

@IBOutlet weak var addBarButton: UIBarButtonItem!

addBarButton.enabled = false
addBarButton.tintColor = UIColor.clearColor()

এবং যখন আপনাকে এই বারটি আবার দেখাতে হবে, কেবল বিপরীত বৈশিষ্ট্যগুলি সেট করুন।

ইন সুইফট 3 পরিবর্তে enableব্যবহার isEnableসম্পত্তি।



12

আইওএস 8. কাস্টম ইমেজ সহ ইউআইবারবারটন আইটেম। অনেকগুলি বিভিন্ন উপায়ে চেষ্টা করেছেন, তাদের বেশিরভাগই সহায়তা করছেন না। সর্বাধিক সমাধান,setTintColor কোনও রঙে পরিবর্তন হচ্ছে না। আমি নিজেই এটি আবিষ্কার করেছি, ভেবেছিলাম এটি কারওর কাজে লাগবে।

লুকানোর জন্য:

[self.navigationItem.rightBarButtonItem setEnabled:NO];
[self.navigationItem.rightBarButtonItem setImage:nil];

দেখানোর জন্য:

[self.navigationItem.rightBarButtonItem setEnabled:YES];
[self.navigationItem.rightBarButtonItem setImage:image];

9

মধ্যে চেষ্টা সুইফট , আপডেট করে নাtintColor যদি আপনি AppDelegate মধ্যে ফন্টের আকার মত আপনার UIBarButtonItem জন্য কিছু নকশা আছে, এটি সম্পূর্ণ যখন দেখানো আপনার বাটন চেহারা পরিবর্তন করতে হবে।

কোনও পাঠ্য বোতামের ক্ষেত্রে, শিরোনাম পরিবর্তন করা আপনার বোতামটি 'অদৃশ্য হয়ে যেতে' পারে।

if WANT_TO_SHOW {
    myBarButtonItem.enabled = true
    myBarButtonItem.title = "BUTTON_NAME"
}else{
    myBarButtonItem.enabled = false
    myBarButtonItem.title = ""
}

7

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

deleteButton.tintColor = UIColor.clear
deleteButton.isEnabled = false
deleteButton.isAccessibilityElement = false

এবং তারপরে isAccessibilityElementবোতামটি "প্রদর্শন" করার সময় সত্যে ফিরে আসুন:

deleteButton.tintColor = UIColor.blue
deleteButton.isEnabled = true
deleteButton.isAccessibilityElement = true

বার বাটন আইটেমটি এখনও স্থান গ্রহণ করা আমার ক্ষেত্রে কোনও সমস্যা ছিল না, যেহেতু আমরা ডান বারের বোতামের আইটেমগুলির বেশিরভাগটি লুকিয়ে / দেখিয়েছিলাম।



5

@Lnafziger উত্তর থেকে উন্নতি করা

আপনার বারবুটটনগুলিকে একটি শক্তিশালী আউটলেটে সংরক্ষণ করুন এবং এটি লুকিয়ে / দেখানোর জন্য এটি করুন:

-(void) hideBarButtonItem :(UIBarButtonItem *)myButton {
    // Get the reference to the current toolbar buttons
    NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];

    // This is how you remove the button from the toolbar and animate it
    [navBarBtns removeObject:myButton];
    [self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
}


-(void) showBarButtonItem :(UIBarButtonItem *)myButton {
    // Get the reference to the current toolbar buttons
    NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];

    // This is how you add the button to the toolbar and animate it
    if (![navBarBtns containsObject:myButton]) {
        [navBarBtns addObject:myButton];
        [self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
    }
}

যখন কখনও প্রয়োজন ফাংশন নীচে ব্যবহার ..

[self showBarButtonItem:self.rightBarBtn1];
[self hideBarButtonItem:self.rightBarBtn1];

5

জাস্টটি সেট করুন barButton.customView = UIView()এবং দেখুন ট্রিক


এই উত্তরটি যা করে তা হ'ল সমস্ত নমনীয় আকারের কাজ করতে দেওয়া। এটি আসলে একটি সুপার দক্ষ উত্তর। সম্ভবত কোনও এক্সটেনশনের সাথে মিলিত হয়ে এটি নিখুঁত হবে।
অ্যাড্রিয়ান_হ

4

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


এটি আসলে সত্য নয় - ম্যাক্স দ্বারা বর্ণিত পদ্ধতিটি ভালভাবে কাজ করে।
northernman

1
নটরম্যান - ম্যাক্স আসলে সঠিক নয়। তিনি আসলে বোতামটি যেভাবে লুকিয়ে রাখছেন না বেশিরভাগ লোকেরা "লুকিয়ে থাকা" সংজ্ঞায়িত করবেন। তিনি কেবল এটি দৃশ্যমান নয় এবং ব্যবহারকারীর মিথস্ক্রিয়া অক্ষম করছেন। বোতামটি এখনও আছে এবং জায়গা নেয়। আপনি কীভাবে "লুকোচুরি" সংজ্ঞায়িত করতে চান এটি নীচে নেমে আসে, আমি বিশ্বাস করি যে আসল প্রশ্নের আত্মা আসলে এটি অদৃশ্য করে না, বরং এটি সরিয়ে / যুক্ত করতে চেয়েছিল।
মাইকেল পিটারসন

4

এটি উত্তর তালিকার নিচে দীর্ঘ, তবে কেবলমাত্র কেউ যদি দ্রুত সমাধানের জন্য একটি সহজ অনুলিপি এবং পেস্ট চান, তবে এটি এখানে

func hideToolbarItem(button: UIBarButtonItem, withToolbar toolbar: UIToolbar) {
    var toolbarButtons: [UIBarButtonItem] = toolbar.items!
    toolbarButtons.removeAtIndex(toolbarButtons.indexOf(button)!)
    toolbar.setItems(toolbarButtons, animated: true)
}

func showToolbarItem(button: UIBarButtonItem, inToolbar toolbar: UIToolbar, atIndex index: Int) {
    var toolbarButtons: [UIBarButtonItem] = toolbar.items!
    if !toolbarButtons.contains(button) {
        toolbarButtons.insert(button, atIndex: index)
        toolbar.setItems(toolbarButtons, animated:true);
    }
}

খারাপ না তবে আপনাকে অবশ্যই ইউআইএনএভিগেশন আইটেমটি প্যারামিটার হিসাবে দিতে হবে এবং ইউআইটিউলবার নয় কারণ তিনি একটি ইউআইবারবারটন আইটেমটি গোপন করতে বলে asks আমি আপনার ফাংশনটিকে এতে পরিবর্তন করেছি: func hideToolbarItem (বোতাম: UIBarButtonItem, টুলবার সরঞ্জামদণ্ড সহ: UINavicationItem) {var সরঞ্জামদণ্ডগুলি: [UIBarButtonItem] = টুলবার.সেটবারবারটন আইটেম! ToolbarButtons.removeAtIndex (ToolbarButtons.indexOf (বাটন)!) টুলবার.সেটরাইটবার্ট বাটন আইটেমস (টুলবারব্যাটনস, অ্যানিমেটেড: সত্য)} এবং এটি দুর্দান্ত কাজ করে
কিংয়ালিয়ন

3

এটি করার একটি উপায় হ'ল initWithCustomView:(UIView *)বরাদ্দকালের সম্পত্তি ব্যবহার করা UIBarButtonItem। এর জন্য সাবক্লাসে UIViewগোপন / লুকানো সম্পত্তি থাকবে।

উদাহরণ স্বরূপ:

১. আপনি UIButtonযা লুকিয়ে রাখতে / লুকিয়ে রাখতে চান তা একটি করুন ।

২.UIButton কাস্টম ভিউ হিসাবে এটি করুন । পছন্দ:

UIButton*myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];//your button

UIBarButtonItem*yourBarButton=[[UIBarButtonItem alloc] initWithCustomView:myButton];

৩. আপনি myButtonতৈরি করেছেন আপনি লুকিয়ে / লুকিয়ে রাখতে পারেন ।[myButton setHidden:YES];


তবে এটি অন্যান্য বোতামগুলির মধ্যে ব্যবধানটি বন্ধ করবে না: এটি "লুকানো" থাকাকালীন টুলবারে একটি ফাঁকা জায়গা থাকবে।
lnafziger

@ এলএনএফজিগার হ্যাঁ এটি সত্য, তবে আমি বোতামগুলির মধ্যে ফাঁক বন্ধ করার বিষয়ে ওপি উল্লেখটি পড়িনি, তবে এটি লক্ষ্য করার পক্ষে একটি ভাল বিষয়।
iNoob

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

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

3

সুইফ্ট সংস্করণের জন্য, এখানে কোডটি রয়েছে:

এর জন্য UINavigationBar:

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

2

বার বাটনের আইটেমটি অক্ষম করা অবস্থায় পাঠ্য রঙকে একটি পরিষ্কার রঙে সেট করা সম্ভবত একটি ক্লিনার বিকল্প। কোনও মন্তব্যে আপনাকে ব্যাখ্যা করতে হবে এমন কোনও অদ্ভুততা নেই। এছাড়াও আপনি বোতামটি ধ্বংস করবেন না যাতে আপনি এখনও কোনও সম্পর্কিত স্টোরিবোর্ডের সেগগুলি রাখেন।

[self.navigationItem.rightBarButtonItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]}
                                                      forState:UIControlStateDisabled];

তারপরে আপনি যখন বার বার বোতাম আইটেমটি লুকিয়ে রাখতে চান তখন আপনি কেবল এটি করতে পারেন:

self.navigationItem.rightBarButton.enabled = NO;

এটি খোঁড়া কোনও গোপন সম্পত্তি নেই তবে এটি একই ফলাফল দেয়।


1
ডানবারবারটন আইটেমের ভিতরে আমার একটি বোতাম ছিল। তাই আমি এটি সক্ষম করে কোনও NO তে সেট করেছিলাম এবং এর চিত্রটিকে অক্ষম স্থানে বদলে ফেললাম। কবজির মতো কাজ করেছেন ... ধন্যবাদ
স্কাইওয়াকার

চমত্কার ধারণা, তবে চিত্রটি আমার পক্ষে কার্যকর হয়নি, আমাকে চিত্র হিসাবে 20x20 এর একটি স্বচ্ছ বর্গক্ষেত্র রাখতে হয়েছিল
লেনা ব্রু

2

UIBarButtonItem এর পাঠ্যের পরিবর্তে একটি চিত্র রয়েছে তবে আপনি এটি আড়াল করতে এটি করতে পারেন: navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;


2

কিছু সহায়ক পদ্ধতি আমি ভেবেছিলাম যে lnafziger এর গৃহীত উত্তরের উপর ভিত্তি করে ভাগ করব কারণ আমার প্রতিটিটিতে একাধিক সরঞ্জামদণ্ড এবং একাধিক বোতাম রয়েছে:

-(void) hideToolbarItem:(UIBarButtonItem*) button inToolbar:(UIToolbar*) toolbar{
    NSMutableArray *toolbarButtons = [toolbar.items mutableCopy];
    [toolbarButtons removeObject:button];
    [toolbar setItems:toolbarButtons animated:NO];
}

-(void) showToolbarItem:(UIBarButtonItem*) button inToolbar:(UIToolbar*) toolbar atIndex:(int) index{
    NSMutableArray *toolbarButtons = [toolbar.items mutableCopy];
    if (![toolbarButtons containsObject:button]){
        [toolbarButtons insertObject:button atIndex:index];
        [self setToolbarItems:toolbarButtons animated:YES];
    }
}



2

এখানে একটি এক্সটেনশন যা এটি পরিচালনা করবে।

extension UIBarButtonItem {

    var isHidden: Bool {
        get {
            return tintColor == .clear
        }
        set {
            tintColor = newValue ? .clear : .white //or whatever color you want
            isEnabled = !newValue
            isAccessibilityElement = !newValue
        }
    }

}

ব্যবহার:

myBarButtonItem.isHidden = true

1

এলি বার্কের প্রতিক্রিয়া পরিপূরক করে যদি আপনার UIBarButtonItemশিরোনামের পরিবর্তে পটভূমি চিত্র থাকে তবে আপনি কোডটি ব্যবহার করতে পারেন:

-(void)toggleLogoutButton:(bool)show{
    if (show) {
        self.tabButton.style = UIBarButtonItemStyleBordered;
        self.tabButton.enabled = true;
        UIImage* imageMap = [UIImage imageNamed:@"btn_img.png"];
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:imageMap forState:UIControlStateNormal];
    } else {
        self.tabButton.style = UIBarButtonItemStylePlain;
        self.tabButton.enabled = false;
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:nil forState:UIControlStateNormal];
    }
}

0

আপনার সরঞ্জামদণ্ড.ইটিএমএস অ্যারে নিয়ে যাওয়া দরকার।

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

-(void)initLibraryToolbar {

    libraryToolbarDocumentManagementEnabled = [NSMutableArray   arrayWithCapacity:self.libraryToolbar.items.count];
    libraryToolbarDocumentManagementDisabled = [NSMutableArray arrayWithCapacity:self.libraryToolbar.items.count];
    [libraryToolbarDocumentManagementEnabled addObjectsFromArray:self.libraryToolbar.items];
    [libraryToolbarDocumentManagementDisabled addObjectsFromArray:self.libraryToolbar.items];
    trashCan = [libraryToolbarDocumentManagementDisabled objectAtIndex:3];
    mail = [libraryToolbarDocumentManagementDisabled objectAtIndex:5];
    [libraryToolbarDocumentManagementDisabled removeObjectAtIndex:1];
    trashCan.enabled = NO;
    mail.enabled = NO;
    [self.libraryToolbar setItems:libraryToolbarDocumentManagementDisabled animated:NO];

}

সুতরাং এখন আপনার বোতামটি দেখানোর জন্য নিম্নলিখিত কোডটি ব্যবহার করতে পারেন

[self.libraryToolbar setItems:libraryToolbarDocumentManagementEnabled animated:YES];
trashCan.enabled = YES;
mail.enabled = YES; 

বা আপনার বোতামটি আড়াল করতে

[self.libraryToolbar setItems:libraryToolbarDocumentManagementDisabled animated:YES];
trashCan.enabled = NO;
mail.enabled = NO;

0

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

রানটাইমের সময় এটির একই প্রভাব থাকে না, বোতামটির শিরোনামটি শূন্য করে দেওয়ার ফলে পুরো বোতামটি অদৃশ্য হয়ে যাবে না। দুঃখিত সত্যই আপনার প্রশ্নের উত্তর দেয় না, তবে কারও কারও পক্ষে কাজে লাগতে পারে।

সম্পাদনা: বোতামের স্টাইলটি প্লেইন সেট করা থাকলে এই কৌশলটি কেবল কাজ করে


0

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

প্রস্থকে সর্বনিম্ন মান নির্ধারণ করা আইওএস 7 এ কাজ করে না।


0

@Lnafziger, @ মাইন্ডস্পাইকার, @ বিশাল, এবং এ toণের সাথে। আল,

আমি একক ডান (বা বাম) বার বোতামের জন্য পৌঁছেছি সবচেয়ে সহজ একটি লাইনার:

self.navigationItem.rightBarButtonItem = <#StateExpression#>
    ? <#StrongPropertyButton#> : nil;

হিসাবে:

@interface MyClass()

@property (strong, nonatomic) IBOutlet UIBarButtonItem *<#StrongPropertyButton#>;

@end

@implementation

- (void) updateState
{
    self.navigationItem.rightBarButtonItem = <#StateExpression#>
        ? <#StrongPropertyButton#> : nil;
}

@end

আমি এটি পরীক্ষা করেছি এবং এটি আমার পক্ষে কাজ করে (আইবি এর মাধ্যমে ওয়্যার্ড বার বোতাম আইটেম সহ)।


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