ইউআইবাটন: নির্বাচিত-হাইলাইটেড স্টেটের জন্য চিত্র সেট করুন


158

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

আমার কোড:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

যখন আমি করি:

[button setSelected:YES];

এবং বোতাম টিপুন, "pressed.png" চিত্রটি নির্বাচন করে না।


+1 আমার একই সমস্যা আছে, আশা করি উত্তরগুলি আসবে।
নিক ওয়েইভার

3
উজ্জ্বল! কে কখনও জানতে পারে যে আপনি সমন্বয়গুলির জন্য চিত্রগুলি সেট করতে পারেন! আমার জন্য একটি কবজ মত কাজ!
ডেভিড এইচ

1
অসাধারণ!!! আপনার প্রশ্ন নিজেই আমার জন্য উত্তর ... এটি কাজ !!!
কিরণ এস

1
এটি কেবল ইউআইসিএন্ট্রোলস্টেটহাইটলাইটের সাথে আমার পক্ষে কাজ করে তবে আমি button.adjustsImageWhenHighlighted = NO;প্রথমে কল করি ।
গ্রাহাম পার্কস

এই. আমার আগে যে সমাধান ছিল তার চেয়ে অনেক ভাল।
মেশাচ

উত্তর:


231

আমি সমাধানটি খুঁজে পেয়েছি: সংযোজন লাইন যুক্ত করা দরকার

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

5
ইন্টারফেস বিল্ডারের মাধ্যমে এটি করার কোনও উপায়?
স্টিফেন

6
@ স্টেফেন: "স্টেটকনফিগ" (ডিফল্ট / হাইলাইটলাইট / সিলেক্টেড / ডিসএকড) সংস্থাগুলির বিভিন্ন অবস্থার জন্য ইউআইবাটনটির "পটভূমি" (চিত্র) সম্পত্তি সেট করা আমার জন্য কাজ করে।
অজিত

2
অজিতের সমাধান আমার পক্ষে কার্যকর হয়নি। আমি আইবিতে এটি করার একটি
লুকাস

3
যেহেতু আপনি এটি আইবিতে সেট করতে পারবেন না, আপনি এটি আপনার ভিউডিডলড পদ্ধতিতে রাখতে পারেন এবং এটি প্রায় হিসাবে ভাল হবে, যেহেতু আপনি তখন আইবিতে চিত্রটি পরিবর্তন করতে পারেন এবং ম্যাচের জন্য কোডটি সর্বদা আপডেট করার বিষয়ে চিন্তা করতে হবে না। [বাটন সেট ইমেজ: [বাটন ইমেজ ফোর্স স্টেট: ইউআইকন্ট্রোলস্টেট হাইলাইটলাইটেড] ফোর স্টেট: ইউআইসিএন্ট্রোলস্টেট নির্বাচন করা | UIControlStateHighlighted];
ডেভ উড

4
আপনি আইবিতে এটি করতে পারেন । নীচের উত্তরে স্ক্রিনশট দেখুন!
রোমহায়ার

121

আপনি ইন্টারফেস বিল্ডারে এটি করতে পারেন।

UIButtonআপনি যেটি সেট করতে চান তা নির্বাচন করুন এবং IBতারপরে যান attributes inspector

স্ক্রিন শটগুলিতে, আমি একটি কাস্টম বোতামের প্রকারটি ব্যবহার করছি, তবে তাতে কিছু আসে যায় না

কাস্টম ডিফল্ট

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

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


5
কাস্টম বা সিস্টেম আসলে অনেক বেশি গুরুত্বপূর্ণ। উভয় সঙ্গে খেলা এবং আপনি দেখতে পাবেন।
বেন সিনক্লেয়ার

9
প্রশ্নের প্রসঙ্গে নয়।
রোমহায়ার

7
এটি প্রশ্নের উত্তর দেয় না। তিনি বলেছেন যে হাইলাইট + নির্বাচিত রাষ্ট্রের সংমিশ্রণ
রাফায়েল নোব্রে

+1 কারণ আমি এই টানা ডাউন মেনুগুলিকে পুরোপুরি মিস করেছি (আমি বেশ কিছুদিন আগে পর্যন্ত প্রোগ্রামিকভাবে সবকিছুই করতাম ...)
নিকোলাস মিয়ারি

30

সুইফট 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

পটভূমি চিত্র সেট করতে আমরা ব্যবহার করতে পারি setBackgroundImage(_:for:)

সুইফট 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])

অ্যারে সংস্করণটি আমার পক্ষে কার্যকর হয়নি। (কমপক্ষে চলাকালীন setImage)
হুগি

1
আইওএস 10 আপনার স্বাভাবিক / নির্বাচিত চিত্রগুলিকে ম্লান করে দেবে, যা দুর্দান্ত এবং দুর্দান্ত দেখাচ্ছে। আপনি যদি একটি নির্বাচিত, হাইলাইটেড চিত্রটি সেট করেন তবে এটি স্বয়ংক্রিয়ভাবে পরবর্তীটিকে ম্লান করবে না। যা একটি বোমা।
স্নোয়েল

28

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

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

আমি জানি তবে আমার কোনওভাবেই অনুমতি ছিল না
আলঘানোর

1
কিছু কারণে আমি এখনও উপরে হিসাবে সেট করে নিলেও সমস্যাটি পাই। আমার নিয়ন্ত্রণ অবস্থার জন্য কাস্টম চিত্র পাওয়ার জন্য আমার একমাত্র উপায় হ'ল কেবল ইউআইসিএন্ট্রোলস্টেট হাইলাইটলাইট সেট করা।
জুলিয়াস

12

আপনার যদি এটি করার উপযুক্ত কারণ থাকে তবে এটি কৌশলটি করবে

এই লক্ষ্যগুলি যুক্ত করুন:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}

এর জন্য ধন্যবাদ, তবে আসলে এটি খুব জটিল) আমি প্রত্যাশা করব যে উপরের বর্ণিত হিসাবে বোতামটি কাজ করবে
user478681

7

সুইফট ৩.x-এ, নীচের উপায়ে বোতামটি নির্বাচন করা হলে আপনি হাইলাইট করা চিত্রটি সেট করতে পারেন:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))


2

আমি ভুল হলে আমাকে সংশোধন করুন। করেছে

   [button setSelected:YES];

আপনি নির্বাচিত হিসাবে পরিষ্কারভাবে বোতামগুলির স্থিতি পরিবর্তন করছেন। সুতরাং প্রাকৃতিকভাবে আপনি কোডটি সরবরাহ করেছেন সেই কোডের মাধ্যমে যা আপনার ক্ষেত্রে নির্বাচিত রাষ্ট্রের জন্য চেক করা হয়েছে ppng


"রাষ্ট্র পরিবর্তন করে সাফ করা ..." এর অর্থ আপনি কী তা পুরোপুরি বুঝতে পারছেন না। এটি খুব সহজ: আমি উপরে বর্ণিত রাজ্যগুলির জন্য চিত্রগুলি সেট করেছি, এই বোতামটির জন্য লক্ষ্য-অ্যাকশন যুক্ত করব এবং সেই পদ্ধতিতে যা আমার ক্রিয়াকলাপটি প্রক্রিয়া করে (নিয়ন্ত্রণ ইভেন্ট UIControlEventTouchUpInside) আমি বোতামের জন্য নির্বাচিত স্থানে টগল করছি [বোতাম সেটসিলারেটেড: YES / NO]। এবং যখন বাটনটি নির্বাচিত অবস্থায় রয়েছে এবং আমি এটি টিপুন / হাইলাইট করি তখন আমি কেবল ধূসর চিত্র দেখতে পাই, যেমন এই রাজ্যের কোনও চিত্র সেটআপ ছিল না।
user478681

আমি স্পষ্টভাবে বলতে চাইছি সেখানে। তার জন্য দুঃখিত। আপনি প্রথমে বোতামটি টিপলে আপনি নির্বাচিত হিসাবে এর স্থিতি স্থাপন করছেন, যাতে সেই চিত্রটি প্রদর্শিত হবে। সুতরাং আপনি যদি হাইলাইট করতে চান তবে তার চিত্রটিকে হাইলাইট করা হিসাবে তৈরি করুন। আমি আপনাকে সঠিকভাবে পাচ্ছি কিনা তা নিশ্চিত নই
ভিসাখ

আমি যখন বোতামটি টিপবো আমি প্রথমে এটিকে হাইলাইট করা হিসাবে বর্ণনা করি এবং তারপরে যখন আমি এটি প্রকাশ করি তখন রাষ্ট্রটি নির্বাচিত হবে (যেমন আমি এটি আমার ক্রিয়া পদ্ধতিতে সেট করেছি)। আমি এটিকে আবার টিপানোর আগেই (নির্বাচিত অবস্থায় ইতিমধ্যে বোতাম) চাপিয়েছি এবং রাষ্ট্রটি হাইলাইটে পরিবর্তিত করা উচিত এবং আমার চাপানো.পিএনজি চিত্রটি দেখতে হবে তবে আমি এ ক্ষেত্রে এটি দেখতে পাচ্ছি না।
user478681

1

কেউ যদি ভাবছেন যে এটি কীভাবে সুইফটে কাজ করে তবে আমার সমাধান এখানে দেওয়া হয়েছে:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)

@ বাসগড এটি একটি কার্যকর সমাধান, তবে রোল্যান্ড কিসোম যেভাবে এটি লিখেছেন তা অনেক পরিস্কার।
জঙ্গলেদেভ

1

সুইফট 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

অথবা

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

এর অর্থ এই যে বোতামটি বর্তমান selectedঅবস্থায় রয়েছে, তারপরে আপনি এটি স্পর্শ করুন, highlightরাষ্ট্রটি দেখান ।


0

আমার সেটিংসে সমস্যা হয়েছে imageView.highlighted = NO; (সেয়েস ইয়েস সঠিকভাবে কাজ করেছে এবং চিত্রটি হাইলাইট করা হয়েছে)।

সমাধান ডাকছিল [imageView setHighlighted:NO];

সবকিছু ঠিকঠাক কাজ করেছে।


0

যেখানে আপনি কল করতে চান

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

পদ্ধতি:

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

জোর্জে উপরে ক্রেডিট তবে আমি সম্পূর্ণ কাজের সমাধানটি প্রদান করে এটি কিছুটা উন্নত করেছি


0

জামারিন সি #

কিছুটা হলেও বা কোনও কারণে কাজ করে না

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

নিম্নলিখিত কাজ করে

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);

0

আপনি যদি নির্বাচিত রাজ্যের জন্য কাস্টম বোতামটি আলতো চাপুন এবং ধরে রাখেন তখন ওএস ডিফল্টরূপে সরবরাহ করে যা হাইলাইটেড টিন্টের প্রয়োজন হলে এই ইউআইবাটন সাবক্লাসটি ব্যবহার করুন। সুইফ্ট 5 এ লিখিত:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            if (self.isSelected != isHighlighted) {
                self.isHighlighted = self.isSelected
            }
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.