ฉันต้องฝังไอคอนเล็ก ๆ (เรียงลำดับของกระสุนที่กำหนดเอง) ลงUILabel
ใน iOS7 ฉันจะทำสิ่งนี้ในผู้ออกแบบอินเตอร์เฟสได้อย่างไร หรืออย่างน้อยในรหัส?
ใน Android มีleftDrawable
และrightDrawable
สำหรับป้ายกำกับ แต่ทำใน iOS ได้อย่างไร ตัวอย่างใน Android:
ฉันต้องฝังไอคอนเล็ก ๆ (เรียงลำดับของกระสุนที่กำหนดเอง) ลงUILabel
ใน iOS7 ฉันจะทำสิ่งนี้ในผู้ออกแบบอินเตอร์เฟสได้อย่างไร หรืออย่างน้อยในรหัส?
ใน Android มีleftDrawable
และrightDrawable
สำหรับป้ายกำกับ แต่ทำใน iOS ได้อย่างไร ตัวอย่างใน Android:
คำตอบ:
คุณสามารถทำได้ด้วยการแนบข้อความของ 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;
UIImageView
ชื่อของคุณ
NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment]; NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithAttributedString:attachmentString]; NSAttributedString *myText = [[NSMutableAttributedString alloc] initWithString:text]; [myString appendAttributedString:myText];
นี่คือวิธีการฝังไอคอนใน 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
Objective-C Version
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;
สวิฟท์ 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
ภาพอ้างอิงของคุณดูเหมือนปุ่ม ลอง (สามารถทำได้ในเครื่องมือสร้างส่วนต่อประสาน):
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];
รุ่น Swift 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
ส่วนขยาย UILabel
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
}
}
ฉันได้ใช้งานคุณลักษณะนี้อย่างรวดเร็วที่นี่: 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)
นี่คือลักษณะ:
Swift 4 UIlabel
Extension เพื่อเพิ่ม Image to Label โดยอ้างอิงจากคำตอบข้างต้น
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])
เวอร์ชั่น Swift 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
ลองลาก a UIView
ไปที่หน้าจอใน IB จากตรงนั้นคุณสามารถลากUIImageView
และUILabel
ลงในมุมมองที่คุณเพิ่งสร้างขึ้น ตั้งค่ารูปภาพของUIImageView
ในตัวตรวจสอบคุณสมบัติเป็นรูปภาพสัญลักษณ์ที่กำหนดเอง (ซึ่งคุณจะต้องเพิ่มในโครงการของคุณโดยการลากลงในบานหน้าต่างนำทาง) และคุณสามารถเขียนข้อความในฉลาก
ลองด้วยวิธีนี้ ...
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];
Swift 5 Easy Way เพียง CopyPaste และเปลี่ยนสิ่งที่คุณต้องการ
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
คุณสามารถใช้UITextFieldกับคุณสมบัติleftViewแล้วตั้งค่าenabled
คุณสมบัติเป็นNO
หรือใช้UIButtonและsetImage:forControlState
ใน Swift 2.0
ทางออกของปัญหาคือการรวมกันของสองคำตอบสำหรับคำถามนี้ ปัญหาที่ฉันเผชิญในคำตอบของ @ Phil ก็คือฉันไม่สามารถเปลี่ยนตำแหน่งของไอคอนได้และมันก็ปรากฏขึ้นตรงมุมเสมอ และคำตอบเดียวจาก @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
}
โซลูชันนี้จะไม่เพียง แต่ช่วยให้คุณวางภาพ แต่ยังช่วยให้คุณสามารถเปลี่ยนแปลงขนาดไอคอนและคุณสมบัติอื่น ๆ
ขอบคุณ.
การขยายอย่างรวดเร็ว 3 UILabel
เคล็ดลับ: หากคุณต้องการช่องว่างระหว่างรูปภาพและข้อความเพียงใช้ช่องว่างหรือสองช่องก่อนหน้า labelText
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
}
}
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
}
คุณสามารถใช้ฟังก์ชั่นนี้เพื่อเพิ่มรูปภาพหรือไอคอนขนาดเล็กลงในฉลาก
คุณต้องสร้างวัตถุที่กำหนดเองที่คุณใช้UIView
และภายในคุณใส่UIImageView
และUILabel