অক্ষম UIButton বিবর্ণ বা ধূসর নয়


135

আমার আইফোনের অ্যাপে আমার একটি ইউআইবাটন আছে যা আমি ইন্টারফেস বিল্ডারে তৈরি করেছি। আমি আমার কোডটিতে এটি সফলভাবে সক্ষম ও অক্ষম করতে পারি ...

sendButton.enabled = YES;

অথবা

sendButton.enabled = NO;

তবে বোতামের ভিজ্যুয়াল লুকটি সবসময় একই থাকে! এটি বিবর্ণ বা ধূসর হয় না। আমি যদি এটি ক্লিক করার চেষ্টা করি তবে এটি সক্ষম বা প্রত্যাশিত অক্ষম। আমি কিছু অনুপস্থিত করছি? এটি বিবর্ণ বা ধূসর দেখাচ্ছে না?


আরি আপনি আপনার ইউআইবাটন দিয়ে ছবি ব্যবহার করছেন?
ঝালিয়া

না, এটি হয় না, আপনাকে এর আলফা সেট করতে হবে, সেই অনুসারে এটি কাজ করবে।
রাবিন

উত্তর:


187

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

sendButton.enabled = YES;
sendButton.alpha = 1.0;

or

sendButton.enabled = NO;
sendButton.alpha = 0.5;

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

78

অক্ষম করার জন্য কেবলমাত্র রাষ্ট্রের কনফিগারেশন পরিবর্তন করুন এবং আপনি যা চান তা চয়ন করুন, অক্ষম রাষ্ট্রের জন্য ব্যাকগ্রাউন্ড চিত্র

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


13
এটি কেবলমাত্র বোতাম সাব শিরোনামে বৈশিষ্ট্য পরিবর্তন করে । পটভূমির রঙটি ভিউ সাবহেডিংয়ের অধীনে রয়েছে , সুতরাং রাষ্ট্রীয় কনফিগারেশনে পরিবর্তন হয় না।
হান্টার সন্ন্যাস

2
এটি দেখার পটভূমির রঙের জন্য কাজ করছে না। আমার প্রকল্পে আমি পূর্ববর্তী উত্তর এবং এটি মিলিত করেছি।
আন্তন

40

আর একটি বিকল্প হ'ল অক্ষম রাষ্ট্রের জন্য পাঠ্যের রঙ পরিবর্তন করা (উদাহরণস্বরূপ হালকা ধূসর)।

স্টোরিবোর্ড সম্পাদকে, পপআপ বোতামটি Disabledথেকে চয়ন করুন State ConfigText Colorপাঠ্যের রঙ পরিবর্তন করতে পপআপ বোতামটি ব্যবহার করুন ।

কোডে, -setTitleColor:forState:বার্তাটি ব্যবহার করুন ।


এটি আলফা সামঞ্জস্য করার ব্যতীত উত্তরের চেয়ে অনেক ভাল সমাধানের মতো বলে মনে হচ্ছে। আমি ইতিমধ্যে কয়েক মাস আগে এটিকে ভোট দিয়েছি এবং এখন আবার একই সমস্যা নিয়ে এখানে এসেছি, আমি আশা করি আমি এটি আবার করতে পারতাম!
বেঞ্জোহন

হ্যাঁ, এটি একটি কার্যকর সমাধান বলে মনে হচ্ছে। আমি শুধু হালকা ধূসর রঙ ব্যবহার করি।
আটারেস্কভ

23

UIControlStateDisabled(অক্ষম ধূসর চিত্র) এবং UIControlStateNormal(সাধারণ চিত্র) এর জন্য বিভিন্ন চিত্র সেট করার চেষ্টা করুন যাতে বোতামটি আপনার জন্য অক্ষম রাষ্ট্র তৈরি করে।


2
তিনি ছবি ব্যবহার করছেন না - তবে আপনি এই একই ধারণাটি প্রয়োগ করতে পারেন [ UIButton setAttributedTitle:forState:]। আপনার পাঠ্য ফোরগ্রাউন্ড রঙটি স্বচ্ছ রঙে সেট করা আছে এমন আপনার বিশিষ্ট স্ট্রিংটি তৈরি করুন।
নিলসবট

20

অক্ষম করার সময় বোতামটি বিবর্ণ হয়ে যাওয়ার জন্য, আপনি এটির জন্য আলফা সেট করতে পারেন। আপনার জন্য দুটি বিকল্প রয়েছে:

প্রথম উপায় : আপনি যদি আপনার অ্যাপ্লিকেশনটিতে আপনার সমস্ত বোতামের জন্য আবেদন করতে চান তবে আপনি extensionইউআইবাটনের জন্য এভাবে লিখতে পারেন :

extension UIButton {

    open override var isEnabled: Bool{
        didSet {
            alpha = isEnabled ? 1.0 : 0.5
        }
    }

}

দ্বিতীয় উপায় : আপনি যদি নিজের অ্যাপ্লিকেশনটিতে কিছু বোতামের জন্য আবেদন করতে চান তবে আপনি নীচের মতো ইউআইবাটন থেকে একটি কাস্টম ক্লাস লিখতে পারেন এবং এই শ্রেণিটি ব্যবহার করতে পারেন যার জন্য আপনি আবেদন করতে চান:

class MyButton: UIButton {
    override var isEnabled: Bool {
        didSet {
            alpha = isEnabled ? 1.0 : 0.5
        }
    }
}

13

আপনি যদি কোনও পাঠ্য বোতাম ব্যবহার করেন, আপনি উদাহরণ পদ্ধতিটি ভিডডলিডে রাখতে পারেন

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

উদাহরণ:

[self.syncImagesButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];

1
এটি কোনও পাঠ্য বোতামের জন্য স্বীকৃত উত্তর হওয়া উচিত .. বর্তমান স্বীকৃত উত্তরটি একটি চিত্র বোতামের জন্য ভাল। অপের মন্তব্যে আমি যা পাই তা হ'ল তার একটি পাঠ্য বোতাম আছে ..
আলী হু

11

আপনি adjustsImageWhenDisabledযা সম্পত্তি এটি ব্যবহার করতে পারেনUIButton
(@property (nonatomic) BOOL adjustsImageWhenDisabled)

উদা:

 Button.adjustsImageWhenDisabled = false

2
এটা কি করে? আপনি কেন এটি ব্যবহার করা উচিত তা ব্যাখ্যা করতে পারেন?
জিপ্পি

7

এটি বেশ পুরানো প্রশ্ন তবে এটি অর্জনের অনেক সহজ উপায় রয়েছে।

myButton.userInteractionEnabled = false

এটি কেবলমাত্র বোতামের চেহারা পরিবর্তন না করে কোনও স্পর্শ অঙ্গভঙ্গি অক্ষম করবে



5

title colorবিভিন্ন রাজ্যের জন্য সেট করুন :

@IBOutlet weak var loginButton: UIButton! {
        didSet {
            loginButton.setTitleColor(UIColor.init(white: 1, alpha: 0.3), for: .disabled)
            loginButton.setTitleColor(UIColor.init(white: 1, alpha: 1), for: .normal)
        }
    }

ব্যবহার: (পাঠ্যের রঙ স্বয়ংক্রিয়ভাবে পরিবর্তন আসবে)

loginButton.isEnabled = false

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


3

নিজেই প্রতিটি বোতামের পরিবর্তে সুইফট> 3.0 এ একটি এক্সটেনশন তৈরি করুন

extension UIButton {
    override open var isEnabled : Bool {
        willSet{
            if newValue == false {
                self.setTitleColor(UIColor.gray, for: UIControlState.disabled)
            }
        }
    }
}

3

আপনি উভয় প্রথম উত্তর ব্যবহার করতে পারেন এবং একটি ভাল ফলাফল হতে চলেছে।

বৈশিষ্ট্য পরিদর্শক (আপনি যখন বোতামটি নির্বাচন করছেন) তে, নতুন চিত্রটি অক্ষম করা হলে প্রদর্শিত হবে তা সেট করতে স্টেট কনফিগারেশনটি পরিবর্তন করুন (এটি অক্ষম করার জন্য সামগ্রী-> সক্ষম চেকের মার্কারটি সরিয়ে দিন) ।

এবং আপনি যখন রাষ্ট্রটি সক্ষমকে পরিবর্তন করবেন তখন চিত্রটি এই রাজ্যটি থেকে লোড করবে।

এটিতে আলফা যুক্তি যুক্ত করা একটি ভাল বিশদ।


3

সুইফট 4+

extension UIButton {
    override open var isEnabled: Bool {
        didSet {
            DispatchQueue.main.async {
                if self.isEnabled {
                    self.alpha = 1.0
                }
                else {
                    self.alpha = 0.6
                }
            }
        }
    }
}

ব্যবহারবিধি

myButton.isEnabled = false

2

আমি একই সমস্যায় আটকে আছি। আলফা সেট করা আমি যা চাই তা নয়।

UIButton" ব্যাকগ্রাউন্ড ইমেজ " এবং " ব্যাকগ্রাউন্ড রঙ " রয়েছে। চিত্রের জন্য, UIButtonযেমন একটি সম্পত্তি আছে

@property (nonatomic) BOOL adjustsImageWhenDisabled

এবং বোতামটি অক্ষম করা অবস্থায় পটভূমির চিত্রটি হালকা আঁকা। ব্যাকগ্রাউন্ড রঙের জন্য, আলা সেট করা, রাভিনের সমাধান ভাল কাজ করে।

প্রথমে, আপনাকে ইউটিলিটিস-অ্যাট্রিবিউটসের অধীনে "অক্ষম অ্যাডজাস্টস চিত্র" বাক্সটি চেক করা আছে কিনা তা আপনাকে পরীক্ষা করতে হবে।
তারপরে, এই বোতামটির জন্য পটভূমির রঙটি পরীক্ষা করুন।

(আশা করি এটি সহায়ক। এটি একটি পুরানো পোস্ট; এক্সকোডে জিনিসগুলি পরিবর্তিত হতে পারে)।


1

দেখে মনে হচ্ছে নীচের কোডটি ঠিকঠাক কাজ করে। তবে কিছু ক্ষেত্রে, এটি কার্যকর হয় না।

sendButton.enabled = NO;
sendButton.alpha = 0.5;

উপরের কোডটি যদি কাজ না করে তবে দয়া করে এটি মুখ্য থ্রেডে মুড়িয়ে দিন। সুতরাং

dispatch_async(dispatch_get_main_queue(), ^{
    sendButton.enabled = NO;
    sendButton.alpha = 0.5
});

আপনি দ্রুত সঙ্গে যেতে হলে, এই মত

DispatchQueue.main.async {
    sendButton.isEnabled = false
    sendButton.alpha = 0.5
}

এছাড়াও, আপনি যদি ইউআইবাটনটি কাস্টমাইজ করেন তবে এটি বোতাম শ্রেণিতে যুক্ত করুন।

override var isEnabled: Bool {
    didSet {
        DispatchQueue.main.async {
            if self.isEnabled {
                self.alpha = 1.0
            }
            else {
                self.alpha = 0.5
            }
        }
    }
}

আপনাকে ধন্যবাদ এবং কোডিং উপভোগ করুন !!!


1

যদি এর UIButtonসম্মিলিত অবস্থায় থাকে selectedএবং disabledএর রাজ্য হয় UIControlStateSelected | UIControlStateDisabled

সুতরাং এর রাষ্ট্রটিকে এইভাবে সামঞ্জস্য করা দরকার:

[button setTitleColor:color UIControlStateSelected | UIControlStateDisabled];
[button setImage:image forState:UIControlStateSelected | UIControlStateDisabled];

একটি পদ্ধতির সাবক্লাসটি UIButtonনিম্নরূপ:

@implementation TTButton
- (void)awakeFromNib {
   [super awakeFromNib];

    //! Fix behavior when `disabled && selected`
    //! Load settings in `xib` or `storyboard`, and apply it again.
    UIColor *color = [self titleColorForState:UIControlStateDisabled];
    [self setTitleColor:color forState:UIControlStateDisabled];

    UIImage *img = [self imageForState:UIControlStateDisabled];
    [self setImage:img forState:UIControlStateDisabled];
}

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
    [super setTitleColor:color forState:state];

    //
    if (UIControlStateDisabled == state) {
        [super setTitleColor:color forState:UIControlStateSelected | state];
        [super setTitleColor:color forState:UIControlStateHighlighted | state];
    }
}

- (void)setImage:(UIImage *)image forState:(UIControlState)state {
    [super setImage:image forState:state];

    if (UIControlStateDisabled == state) {
        [super setImage:image forState:UIControlStateSelected | state];
        [super setImage:image forState:UIControlStateHighlighted | state];
    }
}

@end

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। সুইফটে আপনার জন্য সেটিটল কালার (অক্ষম রঙ, এর জন্য: [। অক্ষমযুক্ত,। নির্বাচিত]) এর মতো কিছু প্রয়োজন হবে
পাওলো সিজার

0

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

extension UIButton {
  private func image(withColor color: UIColor) -> UIImage? {
    let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()

    context?.setFillColor(color.cgColor)
    context?.fill(rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image
  }

  func setBackgroundColor(_ color: UIColor, for state: UIControlState) {
    self.setBackgroundImage(image(withColor: color), for: state)
  }
}

এই সমাধান সহ কেবল একটি ইস্যু - এই পরিবর্তনটি স্টোরিবোর্ডে তৈরি বোতামগুলিতে প্রয়োগ করা হবে না। আমার পক্ষে এটি কোনও সমস্যা নয় কারণ আমি কোড থেকে ইউআই স্টাইল করতে পছন্দ করি। আপনি যদি স্টোরিবোর্ডগুলি ব্যবহার করতে চান তবে @IBInspectableপ্রয়োজন সহ অতিরিক্ত কিছু যাদু ।

দ্বিতীয় বিকল্পটি সাবক্লাসিং হয় তবে আমি এড়াতে পছন্দ করি।


0

হতে পারে আপনি আপনার বোতামটি সাবক্লাস করতে পারেন এবং আপনার কার্যকর অক্ষরটিকে ওভাররাইড করতে পারেন। সুবিধাটি হ'ল আপনি একাধিক জায়গায় পুনরায় ব্যবহার করতে পারেন।

override var isEnabled: Bool {
     didSet {
         if isEnabled {
             self.alpha = 1
         } else {
             self.alpha = 0.2
         }
     }
 }

-1
#import "UIButton+My.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIButton (My)


-(void)fade :(BOOL)enable{
    self.enabled=enable;//
    self.alpha=enable?1.0:0.5;
}

@end

জ:

#import <UIKit/UIKit.h>
@interface UIButton (My)

-(void)fade :(BOOL)enable;

@end

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