UILabel में छोटा आइकन कैसे एम्बेड करें


153

मुझे UILabeliOS7 में छोटे आइकनों (कस्टम गोलियों के प्रकार) को एम्बेड करना होगा । मैं इंटरफ़ेस डिजाइनर में यह कैसे कर सकता हूं? या कम से कम कोड में?

एंड्रॉइड में leftDrawableऔर rightDrawableलेबल के लिए हैं, लेकिन यह iOS में कैसे किया जाता है? Android में नमूना:

Android नमूना


मैं एंड्रॉइड के साथ पारिवारिक नहीं हूं क्या आप संदर्भ के लिए कुछ छवि पोस्ट कर सकते हैं?
user1673099

2
एक छोटी सी छवि बनाएं और इसे लेबल की वस्तु के रूप में जोड़ दें
सौरभ पासोलिया

जवाबों:


292

आप इसे iOS 7 के टेक्स्ट अटैचमेंट के साथ कर सकते हैं , जो TextKit का हिस्सा हैं। कुछ नमूना कोड:

NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"MyIcon.png"];

NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment];

NSMutableAttributedString *myString= [[NSMutableAttributedString alloc] initWithString:@"My label text"];
[myString appendAttributedString:attachmentString];

myLabel.attributedText = myString;

IOS6 के बारे में कैसे? क्या आपके पास कोई सुझाव है?? Thx
स्टीवन जियांग

1
@StevenJiang: आपको बस UIImageViewअपने लेबल
स्कॉट बेरेवेट्स

1
दुर्भाग्य से यह पाठ के बाद आइकन रखता है। कोई भी मौका है कि हम इसे पाठ से पहले स्थानांतरित कर सकते हैं क्योंकि मुझे कोई रास्ता नहीं मिल सकता है ?!
रिवर्स

4
@reVerse अपने टेक्सचर स्ट्रिंग में इमेज (अटैचमेंट स्ट्रिंग) अप्लाई करने के बजाय, आप कोशिश कर सकते हैं कि दूसरे तरीके से, इसलिए टेक्स्ट स्ट्रिंग को अटैचमेंट स्ट्रिंग में अप्लाई करें।
स्कॉट बेरेवोएट्स

11
कल ही यह कोशिश की थी। एक याद किया हुआ कुछ लगता है क्योंकि अब यह काम करता है। धन्यवाद। बस हर किसी को एक ही पूरा करने के लिए (क्योंकि यह थोड़ा अलग है) कोशिश कर रहा है के लिए मामले में: NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment]; NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithAttributedString:attachmentString]; NSAttributedString *myText = [[NSMutableAttributedString alloc] initWithString:text]; [myString appendAttributedString:myText];
रिवर्स

153

यहाँ UILabel में आइकन एम्बेड करने का तरीका है।

इसके अलावा आइकन को संरेखित करने के लिए अनुलग्नक का उपयोग करें। सीमाएं


स्विफ्ट 5.1

// Create Attachment
let imageAttachment = NSTextAttachment()
imageAttachment.image = UIImage(named:"iPhoneIcon")
// Set bound to reposition
let imageOffsetY: CGFloat = -5.0
imageAttachment.bounds = CGRect(x: 0, y: imageOffsetY, width: imageAttachment.image!.size.width, height: imageAttachment.image!.size.height)
// Create string with attachment
let attachmentString = NSAttributedString(attachment: imageAttachment)
// Initialize mutable string
let completeText = NSMutableAttributedString(string: "")
// Add image to mutable string
completeText.append(attachmentString)
// Add your text to mutable string
let textAfterIcon = NSAttributedString(string: "Using attachment.bounds!")
completeText.append(textAfterIcon)
self.mobileLabel.textAlignment = .center
self.mobileLabel.attributedText = completeText

उद्देश्य-सी संस्करण

NSTextAttachment *imageAttachment = [[NSTextAttachment alloc] init];
imageAttachment.image = [UIImage imageNamed:@"iPhoneIcon"];
CGFloat imageOffsetY = -5.0;
imageAttachment.bounds = CGRectMake(0, imageOffsetY, imageAttachment.image.size.width, imageAttachment.image.size.height);
NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:imageAttachment];
NSMutableAttributedString *completeText = [[NSMutableAttributedString alloc] initWithString:@""];
[completeText appendAttributedString:attachmentString];
NSAttributedString *textAfterIcon = [[NSAttributedString alloc] initWithString:@"Using attachment.bounds!"];
[completeText appendAttributedString:textAfterIcon];
self.mobileLabel.textAlignment = NSTextAlignmentRight;
self.mobileLabel.attributedText = completeText;

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें


22
अटैचमेंट के लिए वोट करें।
पीटर झाओ

3
अटैचमेंट का उपयोग करके शानदार कॉल करें। सीमाएं। वह वही है जिसकी मुझे तलाश थी।
ज्योहर्ना

2
वास्तव में, इमेजऑफसेट -5.0 के निश्चित मूल्य का उपयोग करने के बजाय गणना की जा सकती है। let इमेजऑफसेट: CGFloat = - (imageAttachment.image! .size.height - self.mobileLabel.font.pointSize) / 2.0;
जॉनस्लो सीएनएन

नोट: यह संकलन समय को धीमा करता है
जैक

मैं इसे स्टोरीबोर्ड पर कर सकता हूं?
अगस्तो

53

स्विफ्ट 4.2:

let attachment = NSTextAttachment()        
attachment.image = UIImage(named: "yourIcon.png")
let attachmentString = NSAttributedString(attachment: attachment)
let myString = NSMutableAttributedString(string: price)
myString.append(attachmentString)
label.attributedText = myString

23

आपकी संदर्भ छवि बटन की तरह दिखाई देती है। प्रयास करें (इंटरफ़ेस बिल्डर में भी किया जा सकता है):

यहाँ छवि विवरण दर्ज करें

UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(50, 50, 100, 44)];
[button setImage:[UIImage imageNamed:@"img"] forState:UIControlStateNormal];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, -30, 0, 0)];
[button setTitle:@"Abc" forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor yellowColor]];
[view addSubview:button];

अच्छी तरह से समझाया, मुझे यह तथ्य पसंद है कि आपने एक रेफरी प्रदान करने के लिए समय लिया। इसने मेरी बहुत मदद की! धन्यवाद
Shinnyx

इससे मेरे ट्रॉफी आइकन को बटन में लाने में मदद मिली। आपका बहुत बहुत धन्यवाद!
हरीश

23

स्विफ्ट 3 संस्करण

let attachment = NSTextAttachment()
attachment.image = UIImage(named: "plus")
attachment.bounds = CGRect(x: 0, y: 0, width: 10, height: 10)
let attachmentStr = NSAttributedString(attachment: attachment)
let myString = NSMutableAttributedString(string: "")
myString.append(attachmentStr)
let myString1 = NSMutableAttributedString(string: "My label text")
myString.append(myString1)
lbl.attributedText = myString

उइलाबेल एक्सटेंशन

extension UILabel {

    func set(text:String, leftIcon: UIImage? = nil, rightIcon: UIImage? = nil) {

        let leftAttachment = NSTextAttachment()
        leftAttachment.image = leftIcon
        leftAttachment.bounds = CGRect(x: 0, y: -2.5, width: 20, height: 20)
        if let leftIcon = leftIcon {
            leftAttachment.bounds = CGRect(x: 0, y: -2.5, width: leftIcon.size.width, height: leftIcon.size.height)
        }
        let leftAttachmentStr = NSAttributedString(attachment: leftAttachment)

        let myString = NSMutableAttributedString(string: "")

        let rightAttachment = NSTextAttachment()
        rightAttachment.image = rightIcon
        rightAttachment.bounds = CGRect(x: 0, y: -5, width: 20, height: 20)
        let rightAttachmentStr = NSAttributedString(attachment: rightAttachment)


        if semanticContentAttribute == .forceRightToLeft {
            if rightIcon != nil {
                myString.append(rightAttachmentStr)
                myString.append(NSAttributedString(string: " "))
            }
            myString.append(NSAttributedString(string: text))
            if leftIcon != nil {
                myString.append(NSAttributedString(string: " "))
                myString.append(leftAttachmentStr)
            }
        } else {
            if leftIcon != nil {
                myString.append(leftAttachmentStr)
                myString.append(NSAttributedString(string: " "))
            }
            myString.append(NSAttributedString(string: text))
            if rightIcon != nil {
                myString.append(NSAttributedString(string: " "))
                myString.append(rightAttachmentStr)
            }
        }
        attributedText = myString
    }
}

17

मैंने इस सुविधा को यहां तेजी से लागू किया है: https://github.com/anatoliyv/SMIconLabel

कोड जितना संभव हो उतना सरल है:

var labelLeft = SMIconLabel(frame: CGRectMake(10, 10, view.frame.size.width - 20, 20))
labelLeft.text = "Icon on the left, text on the left"

// Here is the magic
labelLeft.icon = UIImage(named: "Bell") // Set icon image
labelLeft.iconPadding = 5               // Set padding between icon and label
labelLeft.numberOfLines = 0             // Required
labelLeft.iconPosition = SMIconLabelPosition.Left // Icon position
view.addSubview(labelLeft)

यहाँ है कि यह कैसा दिखता है:

SMIconLabel छवि


13

UIlabelउपरोक्त उत्तरों के संदर्भ में छवि को लेबल में जोड़ने के लिए स्विफ्ट 4 एक्सटेंशन

extension UILabel {
  func set(image: UIImage, with text: String) {
    let attachment = NSTextAttachment()
    attachment.image = image
    attachment.bounds = CGRect(x: 0, y: 0, width: 10, height: 10)
    let attachmentStr = NSAttributedString(attachment: attachment)

    let mutableAttributedString = NSMutableAttributedString()
    mutableAttributedString.append(attachmentStr)

    let textString = NSAttributedString(string: text, attributes: [.font: self.font])
    mutableAttributedString.append(textString)

    self.attributedText = mutableAttributedString
  }
}

NSAttributedString(string: " " + text, attributes: [.font: self.font])
फ़रज़ाद

@grizzly यह है कि आइकन और टेक्स्ट के बीच जगह बनाने के लिए?
एजेंट स्मिथ

हाँ। आइकन और पाठ के बीच स्थान के लिए एक और तरीका है?
फ़रज़ाद

4

स्विफ्ट 2.0 संस्करण:

//Get image and set it's size
let image = UIImage(named: "imageNameWithHeart")
let newSize = CGSize(width: 10, height: 10)

//Resize image
UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
image?.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
let imageResized = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

//Create attachment text with image
var attachment = NSTextAttachment()
attachment.image = imageResized
var attachmentString = NSAttributedString(attachment: attachment)
var myString = NSMutableAttributedString(string: "I love swift ")
myString.appendAttributedString(attachmentString)
myLabel.attributedText = myString

3

UIViewIB में स्क्रीन पर ड्रैग करने का प्रयास करें । वहां से आप अपने द्वारा बनाए गए दृश्य में एक UIImageViewऔर खींच सकते हैं UILabelUIImageViewप्रॉपर्टी इंस्पेक्टर की छवि को कस्टम बुलेट छवि के रूप में सेट करें (जिसे आपको नेविगेशन फलक में खींचकर अपनी परियोजना में जोड़ना होगा) और आप लेबल में कुछ पाठ लिख सकते हैं।


2

इस तरह आजमाएं ...

  self.lbl.text=@"Drawble Left";
    UIImageView *img=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
    img.image=[UIImage imageNamed:@"Star.png"];
    [self.lbl addSubview:img];

क्या यह आपके लिए मददगार है?
user1673099

यह दृष्टिकोण छवि के लिए पाठ ऑफ़सेट को याद करता है (पाठ छवि के पीछे स्थित है)
ब्रिगेडियर

2

स्विफ्ट 5 आसान तरीका बस कॉपी पेस्ट करें और जो आप चाहते हैं उसे बदल दें

let fullString = NSMutableAttributedString(string:"To start messaging contacts who have Talklo, tap ")

 // create our NSTextAttachment
let image1Attachment = NSTextAttachment() 
image1Attachment.image = UIImage(named: "chatEmoji")
image1Attachment.bounds = CGRect(x: 0, y: -8, width: 25, height: 25)

// wrap the attachment in its own attributed string so we can append it
let image1String = NSAttributedString(attachment: image1Attachment)

 // add the NSTextAttachment wrapper to our full string, then add some more text.

 fullString.append(image1String)
 fullString.append(NSAttributedString(string:" at the right bottom of your screen"))

 // draw the result in a label
 self.lblsearching.attributedText = fullString

यहाँ छवि विवरण दर्ज करें



1

स्विफ्ट 2.0 में,

समस्या का मेरा समाधान इस सवाल पर जवाब के एक जोड़े का एक संयोजन है। @ फिल के जवाब में मुझे जो समस्या थी, वह यह थी कि मैं आइकन की स्थिति नहीं बदल सकता था, और यह हमेशा सही कोने में दिखाई देता था। और @anatoliy_v से एक जवाब, मैं उस आइकन का आकार नहीं बदल सकता, जिसे मैं स्ट्रिंग में जोड़ना चाहता हूं।

मेरे लिए यह काम करने के लिए, मैंने पहले एक काम किया pod 'SMIconLabel'और फिर यह समारोह बनाया:

func drawTextWithIcon(labelName: SMIconLabel, imageName: String, labelText: String!,  width: Int, height: Int) {

        let newSize = CGSize(width: width, height: height)
        let image = UIImage(named: imageName)
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
        image?.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
        let imageResized = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        labelName.text = " \(labelText)"
        labelName.icon = imageResized
        labelName.iconPosition = .Left
    }

यह समाधान न केवल आपको छवि रखने में मदद करेगा, बल्कि आपको आइकन के आकार और अन्य विशेषताओं में आवश्यक बदलाव करने की अनुमति देगा।

धन्यवाद।


1

स्विफ्ट 3 यूइलैबेल एक्सटेंशन

युक्ति: यदि आपको छवि और पाठ के बीच कुछ स्थान की आवश्यकता है तो लेबलटेक्स्ट से पहले एक या दो स्थान का उपयोग करें।

extension UILabel {
    func addIconToLabel(imageName: String, labelText: String, bounds_x: Double, bounds_y: Double, boundsWidth: Double, boundsHeight: Double) {
        let attachment = NSTextAttachment()
        attachment.image = UIImage(named: imageName)
        attachment.bounds = CGRect(x: bounds_x, y: bounds_y, width: boundsWidth, height: boundsHeight)
        let attachmentStr = NSAttributedString(attachment: attachment)
        let string = NSMutableAttributedString(string: "")
        string.append(attachmentStr)
        let string2 = NSMutableAttributedString(string: labelText)
        string.append(string2)
        self.attributedText = string
    }
}

1
मैंने इसका इस्तेमाल किया और इसने पूरी तरह से काम किया। ऊपर के अन्य लोगों ने वास्तव में स्ट्रिंग के अंत तक छवि को फ़्लिप किया।
मौसमी

1
 func atributedLabel(str: String, img: UIImage)->NSMutableAttributedString
{   let iconsSize = CGRect(x: 0, y: -2, width: 16, height: 16)
    let attributedString = NSMutableAttributedString()
    let attachment = NSTextAttachment()
    attachment.image = img
    attachment.bounds = iconsSize
    attributedString.append(NSAttributedString(attachment: attachment))
    attributedString.append(NSAttributedString(string: str))

    return attributedString
} 

आप इस फ़ंक्शन का उपयोग लेबल में चित्र या छोटे आइकन जोड़ने के लिए कर सकते हैं


इसे viewdidload ()
आयुष दीक्षित

let emojisCollection = [UIImage (नाम: "ic_place"), UIImage (नाम: "ic_group"), UIImage (नाम: "ic_analytics"): lbl1.attributedText = atributedLabel (str: "Howath, Dublin", imga: imga) ]!) lbl2.attributedText = atributedLabel (str: "कठिनाई: 18+", img: emojisCollection [2]!) lbl3.attributedText = togentedLabel (str: "अधिकतम समूह आकार: 10", img: emojisCollection [1)!
आयुष दीक्षित

आप उन टिप्पणियों को शामिल करने के लिए मूल उत्तर को संपादित कर सकते हैं।
मूंदड़ा

0

आपको एक कस्टम ऑब्जेक्ट बनाना होगा, जहाँ आपने एक का उपयोग किया था UIViewऔर अंदर आपने एक UIImageViewऔर एक डाल दिया थाUILabel

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.