আপনি কীভাবে এনএসএট্রিবিউটেড স্ট্রিং ব্যবহার করবেন?


308

এক NSStringবা একাধিক রং NSMutableStringsসম্ভব নয়। সুতরাং আমি আইপ্যাড এসডিকে ৩.২ (বা প্রায় ৩.২) এর NSAttributedStringসাথে প্রবর্তিত হয়েছিল এবং আইফোন এসডিকে a.০ বিটা হিসাবে আইফোনটিতে উপলব্ধ যা সম্পর্কে কিছুটা শুনেছি ।

আমি তিনটি রঙের একটি স্ট্রিং চাই।

আমি ৩ টি পৃথক এনএসএসআরটিংস ব্যবহার না করার কারণটি হ'ল তিনটি NSAttributedStringসাবস্ট্রিংয়ের প্রত্যেকটির দৈর্ঘ্য প্রায়শই পরিবর্তিত হয় এবং তাই আমি পছন্দ করব, 3 পৃথক NSStringবস্তুর পুনরায় অবস্থানের জন্য কোনও গণনা ব্যবহার না করা ।

যদি এটি সম্ভব হয় তবে NSAttributedStringকীভাবে আমি নিম্নলিখিতগুলি তৈরি করি তা ব্যবহার করে - (যদি এনএসএট্রিবিউটড স্ট্রিং দিয়ে সম্ভব না হয় আপনি কীভাবে এটি করবেন):

বিকল্প পাঠ

সম্পাদনা: মনে রাখবেন, @"first", @"second"এবং @"third"যে কোনো সময়ে অন্যান্য স্ট্রিং দ্বারা প্রতিস্থাপিত হবে। সুতরাং হার্ডকোডযুক্ত এনএসআরঞ্জের মানগুলি ব্যবহার করা কার্যকর হবে না।



NSAttributeString জন্য সুইফট কোড: stackoverflow.com/questions/27728466/...
কিরিত মোদি

উত্তর:


479

বৈশিষ্ট্যযুক্ত স্ট্রিংগুলি তৈরি করার সময়, আমি জিনিসগুলি পরিষ্কার রাখার জন্য, পরিবর্তিত সাবক্লাস ব্যবহার করতে পছন্দ করি।

বলা হচ্ছে, এখানে আপনি কীভাবে ত্রি-বর্ণযুক্ত বৈশিষ্ট্যযুক্ত স্ট্রিং তৈরি করবেন:

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];

একটি ব্রাউজারে টাইপ করা। সাবধানী প্রয়োগকারী

অবশ্যই আপনি এই জাতীয় রেঞ্জের হার্ড-কোডে যাচ্ছেন না। সম্ভবত পরিবর্তে আপনি যেমন কিছু করতে পারতেন:

NSDictionary * wordToColorMapping = ....;  //an NSDictionary of NSString => UIColor pairs
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@""];
for (NSString * word in wordToColorMapping) {
  UIColor * color = [wordToColorMapping objectForKey:word];
  NSDictionary * attributes = [NSDictionary dictionaryWithObject:color forKey:NSForegroundColorAttributeName];
  NSAttributedString * subString = [[NSAttributedString alloc] initWithString:word attributes:attributes];
  [string appendAttributedString:subString];
  [subString release];
}

//display string

4
আপনি কি দয়া করে আমাকে লেবেলে বিশিষ্ট স্ট্রিং নির্ধারণ করতে পারেন তা আমাকে জানাতে পারেন?
পূজা এম বোহোরা

5
@ সৈয়দফারাজ হায়দারজাইদী ইউআইকিট-তে অন্তর্নির্মিত এমন কিছুই নেই যা একটি গ্রহণ করে NSAttributedString। তবে ওপেন সোর্স জিনিস যেমন ওহ্যাট্রিবিউটেড লেবেল রয়েছে
ডেভ দেলং

4
আপনি যদি আইওএসে কোরটেক্সট.ফ্রেমওয়ার্ক ব্যবহার করেন তবে আপনি সম্ভবত ধ্রুবকটির kCTForegroundColorAttributeNameচেয়ে চাইবেন NSForegroundColorAttributeName
ফিল ক্যালভিন

32
আইওএস 6-এ, যা সবেমাত্র প্রকাশিত হয়েছিল (তাই আমি এনডিএ ছাড়াই কথা বলতে পারি), আপনি myLabel.attributesText = विशेषताযুক্ত স্ট্রিংয়ের মতো কাজ করতে পারেন; এটি ফ্রিকিং টাইম সম্পর্কে ... আমি বছরের পর বছর ধরে এই বৈশিষ্ট্যের জন্য অপেক্ষা করছি।
কেভিন হফম্যান

5
সতর্কতা: অভিধান কীগুলি আনর্ডার্ড করা নেই। উপরের কোডটি ব্যবহার করবেন না, আপনি আপনার স্ট্রিংয়ের ক্রমটি নিয়ন্ত্রণের উপর নিয়ন্ত্রণ সরিয়ে ফেলবেন।
ম্যাট-লয়েড

117

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

#define FONT_SIZE 20
#define FONT_HELVETICA @"Helvetica-Light"
#define BLACK_SHADOW [UIColor colorWithRed:40.0f/255.0f green:40.0f/255.0f blue:40.0f/255.0f alpha:0.4f]

NSString*myNSString = @"This is my string.\nIt goes to a second line.";                

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
               paragraphStyle.alignment = NSTextAlignmentCenter;
             paragraphStyle.lineSpacing = FONT_SIZE/2;
                     UIFont * labelFont = [UIFont fontWithName:FONT_HELVETICA size:FONT_SIZE];
                   UIColor * labelColor = [UIColor colorWithWhite:1 alpha:1];
                       NSShadow *shadow = [[NSShadow alloc] init];
                 [shadow setShadowColor : BLACK_SHADOW];
                [shadow setShadowOffset : CGSizeMake (1.0, 1.0)];
            [shadow setShadowBlurRadius : 1];

NSAttributedString *labelText = [[NSAttributedString alloc] initWithString : myNSString
                      attributes : @{
   NSParagraphStyleAttributeName : paragraphStyle,
             NSKernAttributeName : @2.0,
             NSFontAttributeName : labelFont,
  NSForegroundColorAttributeName : labelColor,
           NSShadowAttributeName : shadow }];

এখানে একটি সুইফ্ট সংস্করণ ...

সতর্কবাণী! এটি 4s এর জন্য কাজ করে।

5 এর জন্য আপনাকে ফ্লোটের সমস্ত মানকে ডাবল ভ্যালুতে পরিবর্তন করতে হবে (কারণ সংকলক এখনও সঠিকভাবে কাজ করছে না)

হরফ পছন্দের জন্য সুইফট এনাম:

enum FontValue: Int {
    case FVBold = 1 , FVCondensedBlack, FVMedium, FVHelveticaNeue, FVLight, FVCondensedBold, FVLightItalic, FVUltraLightItalic, FVUltraLight, FVBoldItalic, FVItalic
}

এনাম অ্যাক্সেসের জন্য সুইফ্ট অ্যারে (প্রয়োজনীয় কারণ এনাম '-' ব্যবহার করতে পারে না):

func helveticaFont (index:Int) -> (String) {
    let fontArray = [
    "HelveticaNeue-Bold",
    "HelveticaNeue-CondensedBlack",
    "HelveticaNeue-Medium",
    "HelveticaNeue",
    "HelveticaNeue-Light",
    "HelveticaNeue-CondensedBold",
    "HelveticaNeue-LightItalic",
    "HelveticaNeue-UltraLightItalic",
    "HelveticaNeue-UltraLight",
    "HelveticaNeue-BoldItalic",
    "HelveticaNeue-Italic",
    ]
    return fontArray[index]
}

সুইফট বিশিষ্ট পাঠ্য ফাংশন:

func myAttributedText (myString:String, mySize: Float, myFont:FontValue) -> (NSMutableAttributedString) {

    let shadow = NSShadow()
    shadow.shadowColor = UIColor.textShadowColor()
    shadow.shadowOffset = CGSizeMake (1.0, 1.0)
    shadow.shadowBlurRadius = 1

    let paragraphStyle = NSMutableParagraphStyle.alloc()
    paragraphStyle.lineHeightMultiple = 1
    paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
    paragraphStyle.alignment = NSTextAlignment.Center

    let labelFont = UIFont(name: helveticaFont(myFont.toRaw()), size: mySize)
    let labelColor = UIColor.whiteColor()

    let myAttributes :Dictionary = [NSParagraphStyleAttributeName : paragraphStyle,
                                              NSKernAttributeName : 3, // (-1,5)
                                              NSFontAttributeName : labelFont,
                                   NSForegroundColorAttributeName : labelColor,
                                            NSShadowAttributeName : shadow]

    let myAttributedString = NSMutableAttributedString (string: myString, attributes:myAttributes)

    // add new color 
    let secondColor = UIColor.blackColor()
    let stringArray = myString.componentsSeparatedByString(" ")
    let firstString: String? = stringArray.first
    let letterCount = countElements(firstString!)
    if firstString {
        myAttributedString.addAttributes([NSForegroundColorAttributeName:secondColor], range:NSMakeRange(0,letterCount))
    }

    return  myAttributedString
}

স্ট্রিং অ্যারেতে ব্যাপ্তি সন্ধানের জন্য ব্যবহৃত প্রথম এবং শেষ এক্সটেনশন:

extension Array {
    var last: T? {
        if self.isEmpty {
            NSLog("array crash error - please fix")
            return self [0]
        } else {
            return self[self.endIndex - 1]
        }
    }
}

extension Array {
    var first: T? {
        if self.isEmpty {
            NSLog("array crash error - please fix")
            return self [0]
        } else {
            return self [0]
        }
    }
}

নতুন রঙ:

extension UIColor {
    class func shadowColor() -> UIColor {
        return UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 0.3)
    }
    class func textShadowColor() -> UIColor {
        return UIColor(red: 50.0/255.0, green: 50.0/255.0, blue: 50.0/255.0, alpha: 0.5)
    }
    class func pastelBlueColor() -> UIColor {
        return UIColor(red: 176.0/255.0, green: 186.0/255.0, blue: 255.0/255.0, alpha: 1)
    }
    class func pastelYellowColor() -> UIColor {
        return UIColor(red: 255.0/255.0, green: 238.0/255.0, blue: 140.0/255.0, alpha: 1)
    }
}

আমার ম্যাক্রো প্রতিস্থাপন:

enum MyConstants: Float {
    case CornerRadius = 5.0
}

আমার বোতাম প্রস্তুতকারক ডাব্লু / গুণযুক্ত পাঠ্য:

func myButtonMaker (myView:UIView) -> UIButton {

    let myButton = UIButton.buttonWithType(.System) as UIButton
    myButton.backgroundColor = UIColor.pastelBlueColor()
    myButton.showsTouchWhenHighlighted = true;
    let myCGSize:CGSize = CGSizeMake(100.0, 50.0)
    let myFrame = CGRectMake(myView.frame.midX - myCGSize.height,myView.frame.midY - 2 * myCGSize.height,myCGSize.width,myCGSize.height)
    myButton.frame = myFrame
    let myTitle = myAttributedText("Button",20.0,FontValue.FVLight)
    myButton.setAttributedTitle(myTitle, forState:.Normal)

    myButton.layer.cornerRadius = myButton.bounds.size.width / MyConstants.CornerRadius.toRaw()
    myButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
    myButton.tag = 100
    myButton.bringSubviewToFront(myView)
    myButton.layerGradient()

    myView.addSubview(myButton)

    return  myButton
}

আমার ইউআইভিউ / ইউআইএলবেল প্রস্তুতকারক ডাব্লু / বিশিষ্ট পাঠ্য, ছায়া এবং গোলাকার কোণ:

func myLabelMaker (myView:UIView) -> UIView {

    let myFrame = CGRectMake(myView.frame.midX / 2 , myView.frame.midY / 2, myView.frame.width/2, myView.frame.height/2)
    let mylabelFrame = CGRectMake(0, 0, myView.frame.width/2, myView.frame.height/2)

    let myBaseView = UIView()
    myBaseView.frame = myFrame
    myBaseView.backgroundColor = UIColor.clearColor()

    let myLabel = UILabel()
    myLabel.backgroundColor=UIColor.pastelYellowColor()
    myLabel.frame = mylabelFrame

    myLabel.attributedText = myAttributedText("This is my String",20.0,FontValue.FVLight)
    myLabel.numberOfLines = 5
    myLabel.tag = 100
    myLabel.layer.cornerRadius = myLabel.bounds.size.width / MyConstants.CornerRadius.toRaw()
    myLabel.clipsToBounds = true
    myLabel.layerborders()

    myBaseView.addSubview(myLabel)

    myBaseView.layerShadow()
    myBaseView.layerGradient()

    myView.addSubview(myBaseView)

    return myLabel
}

জেনেরিক ছায়া যুক্ত করুন:

func viewshadow<T where T: UIView> (shadowObject: T)
{
    let layer = shadowObject.layer
    let radius = shadowObject.frame.size.width / MyConstants.CornerRadius.toRaw();
    layer.borderColor = UIColor.whiteColor().CGColor
    layer.borderWidth = 0.8
    layer.cornerRadius = radius
    layer.shadowOpacity = 1
    layer.shadowRadius = 3
    layer.shadowOffset = CGSizeMake(2.0,2.0)
    layer.shadowColor = UIColor.shadowColor().CGColor
}

দেখার শৈলীর জন্য এক্সটেনশন দেখুন:

extension UIView {
    func layerborders() {
        let layer = self.layer
        let frame = self.frame
        let myColor = self.backgroundColor
        layer.borderColor = myColor.CGColor
        layer.borderWidth = 10.8
        layer.cornerRadius = layer.borderWidth / MyConstants.CornerRadius.toRaw()
    }

    func layerShadow() {
        let layer = self.layer
        let frame = self.frame
        layer.cornerRadius = layer.borderWidth / MyConstants.CornerRadius.toRaw()
        layer.shadowOpacity = 1
        layer.shadowRadius = 3
        layer.shadowOffset = CGSizeMake(2.0,2.0)
        layer.shadowColor = UIColor.shadowColor().CGColor
    }

    func layerGradient() {
        let layer = CAGradientLayer()
        let size = self.frame.size
        layer.frame.size = size
        layer.frame.origin = CGPointMake(0.0,0.0)
        layer.cornerRadius = layer.bounds.size.width / MyConstants.CornerRadius.toRaw();

        var color0 = CGColorCreateGenericRGB(250.0/255, 250.0/255, 250.0/255, 0.5)
        var color1 = CGColorCreateGenericRGB(200.0/255, 200.0/255, 200.0/255, 0.1)
        var color2 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1)
        var color3 = CGColorCreateGenericRGB(100.0/255, 100.0/255, 100.0/255, 0.1)
        var color4 = CGColorCreateGenericRGB(50.0/255, 50.0/255, 50.0/255, 0.1)
        var color5 = CGColorCreateGenericRGB(0.0/255, 0.0/255, 0.0/255, 0.1)
        var color6 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1)

        layer.colors = [color0,color1,color2,color3,color4,color5,color6]
        self.layer.insertSublayer(layer, atIndex: 2)
    }
}

আসল ভিউ লোড ফাংশনটি করেছে:

func buttonPress (sender:UIButton!) {
    NSLog("%@", "ButtonPressed")
}

override func viewDidLoad() {
    super.viewDidLoad()

    let myLabel = myLabelMaker(myView)
    let myButton = myButtonMaker(myView)

    myButton.addTarget(self, action: "buttonPress:", forControlEvents:UIControlEvents.TouchUpInside)

    viewshadow(myButton)
    viewshadow(myLabel)

}

33

আমি মনে করি, regular expressionsগুণাবলীর প্রয়োগের জন্য একটি সীমা নির্ধারণের জন্য এটি ব্যবহার করা খুব সুবিধাজনক । এটি আমি এটি করেছিলাম:

NSMutableAttributedString *goodText = [[NSMutableAttributedString alloc] initWithString:articleText];

NSRange range = [articleText rangeOfString:@"\\[.+?\\]" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location != NSNotFound) {
    [goodText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Georgia" size:16] range:range];
    [goodText addAttribute:NSForegroundColorAttributeName value:[UIColor brownColor] range:range];
}

NSString *regEx = [NSString stringWithFormat:@"%@.+?\\s", [self.article.titleText substringToIndex:0]];
range = [articleText rangeOfString:regEx options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location != NSNotFound) {
    [goodText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Georgia-Bold" size:20] range:range];
    [goodText addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range];
}

[self.textView setAttributedText:goodText];

আমি উপলভ্য বৈশিষ্ট্যগুলির তালিকার সন্ধান করছিলাম এবং সেগুলি এখানে এবং শ্রেণি রেফারেন্সের প্রথম পৃষ্ঠায় খুঁজে পাইনি। সুতরাং আমি এখানে তথ্য পোস্ট করার সিদ্ধান্ত নিয়েছে।

মান বৈশিষ্ট্য

বৈশিষ্ট্যযুক্ত স্ট্রিংগুলি পাঠ্যের জন্য নিম্নলিখিত মানক বৈশিষ্ট্যগুলিকে সমর্থন করে। কীটি অভিধানে না থাকলে নীচে বর্ণিত ডিফল্ট মানগুলি ব্যবহার করুন।

NSString *NSFontAttributeName;
NSString *NSParagraphStyleAttributeName;
NSString *NSForegroundColorAttributeName;
NSString *NSUnderlineStyleAttributeName;
NSString *NSSuperscriptAttributeName;
NSString *NSBackgroundColorAttributeName;
NSString *NSAttachmentAttributeName;
NSString *NSLigatureAttributeName;
NSString *NSBaselineOffsetAttributeName;
NSString *NSKernAttributeName;
NSString *NSLinkAttributeName;
NSString *NSStrokeWidthAttributeName;
NSString *NSStrokeColorAttributeName;
NSString *NSUnderlineColorAttributeName;
NSString *NSStrikethroughStyleAttributeName;
NSString *NSStrikethroughColorAttributeName;
NSString *NSShadowAttributeName;
NSString *NSObliquenessAttributeName;
NSString *NSExpansionAttributeName;
NSString *NSCursorAttributeName;
NSString *NSToolTipAttributeName;
NSString *NSMarkedClauseSegmentAttributeName;
NSString *NSWritingDirectionAttributeName;
NSString *NSVerticalGlyphFormAttributeName;
NSString *NSTextAlternativesAttributeName;

এনএসএট্রিবিউটেড স্ট্রিং প্রোগ্রামিং গাইড

একটি পূর্ণ বর্গ রেফারেন্স এখানে


অ্যাট্রিবিউট কীগুলি তালিকাভুক্ত করার জন্য ধন্যবাদ (অন্যথায় এটি খুঁজে পাওয়া খুব কঠিন)
আলী

আপনি কীভাবে সুইফটে এটি করবেন?
টমাস মার্টিনেজ

25

এই সমাধান যে কোনও দৈর্ঘ্যের জন্য কাজ করবে

NSString *strFirst = @"Anylengthtext";
NSString *strSecond = @"Anylengthtext";
NSString *strThird = @"Anylengthtext";

NSString *strComplete = [NSString stringWithFormat:@"%@ %@ %@",strFirst,strSecond,strThird];

NSMutableAttributedString *attributedString =[[NSMutableAttributedString alloc] initWithString:strComplete];

[attributedString addAttribute:NSForegroundColorAttributeName
              value:[UIColor redColor]
              range:[strComplete rangeOfString:strFirst]];

[attributedString addAttribute:NSForegroundColorAttributeName
              value:[UIColor yellowColor]
              range:[strComplete rangeOfString:strSecond]];

[attributedString addAttribute:NSForegroundColorAttributeName
              value:[UIColor blueColor]
              range:[strComplete rangeOfString:strThird]];


self.lblName.attributedText = attributedString;

নোট করুন যে সুইফটের জন্য আপনার এখনও এনএসএসস্ট্রিং ব্যবহার করতে হবে, সীমার কারণে এই উত্তরটি দেখুন: stackoverflow.com/a/27041376/1736679
এফ্রেন

15

আমি সহজেই গুণাবলী যুক্ত করতে সহায়ক লিখেছি:

- (void)addColor:(UIColor *)color substring:(NSString *)substring;
- (void)addBackgroundColor:(UIColor *)color substring:(NSString *)substring;
- (void)addUnderlineForSubstring:(NSString *)substring;
- (void)addStrikeThrough:(int)thickness substring:(NSString *)substring;
- (void)addShadowColor:(UIColor *)color width:(int)width height:(int)height radius:(int)radius substring:(NSString *)substring;
- (void)addFontWithName:(NSString *)fontName size:(int)fontSize substring:(NSString *)substring;
- (void)addAlignment:(NSTextAlignment)alignment substring:(NSString *)substring;
- (void)addColorToRussianText:(UIColor *)color;
- (void)addStrokeColor:(UIColor *)color thickness:(int)thickness substring:(NSString *)substring;
- (void)addVerticalGlyph:(BOOL)glyph substring:(NSString *)substring;

https://github.com/shmidt/MASAttributes

আপনি কোকোপডগুলির মাধ্যমেও ইনস্টল করতে পারেন: pod 'MASAttributes', '~> 1.0.0'


11

আইওএস 7 যেহেতু আপনি NSAttributedStringএইচটিএমএল সিনট্যাক্সের সাহায্যে ব্যবহার করতে পারেন :

NSURL *htmlString = [[NSBundle mainBundle]  URLForResource: @"string"     withExtension:@"html"];
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:htmlString
                                                                                       options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
                                                                            documentAttributes:nil
                                                                                         error:nil];
textView.attributedText = stringWithHTMLAttributes;// you can use a label also

আপনাকে আপনার প্রোজেক্টে "স্ট্রিং। Html" ফাইলটি যুক্ত করতে হবে এবং এইচটিএমএল এর সামগ্রীটি এরকম হতে পারে:

<html>
  <head>
    <style type="text/css">
      body {
        font-size: 15px;
        font-family: Avenir, Arial, sans-serif;
      }
      .red {
        color: red;
      }
      .green {
        color: green;
      }
      .blue {
        color: blue;
      }
    </style>
  </head>
  <body>
    <span class="red">first</span><span class="green">second</span><span class="blue">third</span>
  </body>
</html>  

এখন, আপনি NSAttributedStringযেমন চান তেমন এইচটিএমএল ফাইল ছাড়াই ব্যবহার করতে পারেন যেমন:

//At the top of your .m file
#define RED_OCCURENCE -red_occurence-
#define GREEN_OCCURENCE -green_occurence-
#define BLUE_OCCURENCE -blue_occurence-
#define HTML_TEMPLATE @"<span style=\"color:red\">-red_occurence-</span><span style=\"color:green\">-green_occurence-</span><span style=\"color:blue\">-blue_occurence-</span></body></html>"

//Where you need to use your attributed string
NSString *string = [HTML_TEMPLATE stringByReplacingOccurrencesOfString:RED_OCCURENCE withString:@"first"] ;
string = [string stringByReplacingOccurrencesOfString:GREEN_OCCURENCE   withString:@"second"];
string = [string stringByReplacingOccurrencesOfString:BLUE_OCCURENCE    withString:@"third"];

NSData* cData = [string dataUsingEncoding:NSUTF8StringEncoding];

NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithData:cData
                                                                                options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
                                                                        documentAttributes:nil
                                                                                     error:nil];
textView.attributedText = stringWithHTMLAttributes;

সূত্র


10

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

সুতরাং আমি একটি ম্যাক অ্যাপ তৈরি করেছি যা আপনার জন্য সমস্ত কোড তৈরি করে।

https://itunes.apple.com/us/app/attributed-string-creator/id730928349?mt=12


এছাড়াও এনএসএ্যাট্রিবিউটেড স্ট্রিংটিকে আরও সহজ করার জন্য এখানে একটি বিভাগ / ব্লগ পোস্ট। raizlabs.com/dev/2014/03/nsattributesstring-creation-helpers
অ্যালেক্স রাউস

3

গুণিত স্ট্রিং এক্সটেনশন সহ একটি সহজ সমাধান।

extension NSMutableAttributedString {

    // this function attaches color to string    
    func setColorForText(textToFind: String, withColor color: UIColor) {
        let range: NSRange = self.mutableString.range(of: textToFind, options: .caseInsensitive)
        self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
    }

}

এটি ব্যবহার করে দেখুন এবং দেখুন (সুইফট 3 এবং 4 এ পরীক্ষিত)

let label = UILabel()
label.frame = CGRect(x: 120, y: 100, width: 200, height: 30)
let first = "first"
let second = "second"
let third = "third"
let stringValue = "\(first)\(second)\(third)"  // or direct assign single string value like "firstsecondthird"

let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColorForText(textToFind: first, withColor: UIColor.red)   // use variable for string "first"
attributedString.setColorForText(textToFind: "second", withColor: UIColor.green) // or direct string like this "second"
attributedString.setColorForText(textToFind: third, withColor: UIColor.blue)
label.font = UIFont.systemFont(ofSize: 26)
label.attributedText = attributedString
self.view.addSubview(label)

এখানে প্রত্যাশিত ফলাফল:

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


3

সুইফ্ট 4 এ:

let string:NSMutableAttributedString = {

    let mutableString = NSMutableAttributedString(string: "firstsecondthird")

    mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: NSRange(location: 0, length: 5))
    mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.green , range: NSRange(location: 5, length: 6))
    mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue , range: NSRange(location: 11, length: 5))
    return mutableString
}()

print(string)

1
দয়া করে একাধিক প্রশ্নের একই উত্তর পোস্ট করবেন না। একটি ভাল উত্তর পোস্ট করুন, তারপরে অন্য প্রশ্নগুলিকে সদৃশ হিসাবে বন্ধ করতে ভোট / পতাকা দিন। যদি প্রশ্নটি সদৃশ না হয় তবে আপনার প্রশ্নের উত্তরগুলি শিখুন।
পল রাউব

আমি সুইফটে উত্তর দেওয়ার চেষ্টা করছি। আমি এর সদৃশ গ্রহণ করেছি। ভোট প্রত্যাশা না করে
অঙ্কিত

দুঃক্ষিত। আমি উত্তরটি সরিয়েছি
অঙ্কিত গার্গ

2

আপনি HTMLনিম্নলিখিত Swiftহিসাবে একটি বিশিষ্ট স্ট্রিং লোড করতে পারেন

   var Str = NSAttributedString(
   data: htmlstring.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true),
   options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
   documentAttributes: nil,
   error: nil)

   label.attributedText = Str  

htmlফাইল থেকে একটি লোড করতে

   if let rtf = NSBundle.mainBundle().URLForResource("rtfdoc", withExtension: "rtf", subdirectory: nil, localization: nil) {

   let attributedString = NSAttributedString(fileURL: rtf, options: [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType], documentAttributes: nil, error: nil)
        textView.attributedText = attributedString
        textView.editable = false
    }

http://sketchytech.blogspot.in/2013/11/creating-nsattributedstring-from-html.html

আর তোমার প্রয়োজনীয় অ্যাট্রিবিউটে অনুযায়ী সেটআপ স্ট্রিং .... এটিকে অনুসরণ করে ..
http://makeapppie.com/2014/10/20/swift-swift-using-attributed-strings-in-swift/


2

আমি একটি লাইব্রেরি তৈরি করেছি যা এটি অনেক সহজ করে তোলে। জেনকপি পরীক্ষা করে দেখুন।

আপনি স্টাইল অবজেক্ট তৈরি করতে পারেন, এবং / অথবা পরে উল্লেখের জন্য কীগুলিতে সেট করতে পারেন। এটার মত:

ZenCopy.manager.config.setStyles {
    return [
        "token": Style(
            color: .blueColor(), // optional
            // fontName: "Helvetica", // optional
            fontSize: 14 // optional
        )
    ]
}

তারপরে, আপনি সহজেই স্ট্রিংগুলি তৈরি করতে পারেন এবং সেগুলি স্টাইল করতে পারেন এবং প্যারামগুলি রাখতে পারেন :)

label.attributedText = attributedString(
                                ["$0 ".style("token") "is dancing with ", "$1".style("token")], 
                          args: ["JP", "Brock"]
)

আপনি সহজেই রেজেক্স অনুসন্ধানগুলি দিয়ে স্টাইল করতে পারেন!

let atUserRegex = "(@[A-Za-z0-9_]*)"
mutableAttributedString.regexFind(atUserRegex, addStyle: "token")

এটি 'টোকেন' শৈলীর সাথে এর সামনে '@' দিয়ে সমস্ত শব্দকে স্টাইল করবে। (উদাহরণস্বরূপ @jpmcglone)

আমার এখনও এটি কাজ করা দরকার ডাব্লু / সমস্ত কিছুর NSAttributedStringপ্রস্তাব রয়েছে তবে আমি মনে করি fontName,fontSize এবং রঙ কভার এটা বপু। শীঘ্রই প্রচুর আপডেট আশা করি :)

আপনার প্রয়োজন হলে আমি এটি শুরু করতে আপনাকে সহায়তা করতে পারি। এছাড়াও প্রতিক্রিয়া সন্ধান করুন, সুতরাং এটি যদি আপনার জীবনকে আরও সহজ করে তোলে, আমি বলব মিশনটি সম্পন্ন হয়েছে।


1
- (void)changeColorWithString:(UILabel *)uilabel stringToReplace:(NSString *) stringToReplace uiColor:(UIColor *) uiColor{
    NSMutableAttributedString *text =
    [[NSMutableAttributedString alloc]
     initWithAttributedString: uilabel.attributedText];

    [text addAttribute: NSForegroundColorAttributeName value:uiColor range:[uilabel.text rangeOfString:stringToReplace]];

    [uilabel setAttributedText: text];

}

0

এ জাতীয় সমস্যা সমাধানের জন্য আমি দ্রুতগতিতে গ্রন্থাগার তৈরি করেছি যার নাম অ্যাট্রিবিউটিকা।

let str = "<r>first</r><g>second</g><b>third</b>".style(tags:
        Style("r").foregroundColor(.red),
        Style("g").foregroundColor(.green),
        Style("b").foregroundColor(.blue)).attributedString

label.attributedText = str

আপনি এটি এখানে https://github.com/psharanda/Atributika খুঁজে পেতে পারেন


0

সুইফট 4

let combination = NSMutableAttributedString()

var part1 = NSMutableAttributedString()
var part2 = NSMutableAttributedString()
var part3 = NSMutableAttributedString()

let attrRegular = [NSAttributedStringKey.font : UIFont(name: "Palatino-Roman", size: 15)]

let attrBold:Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15)]

let attrBoldWithColor: Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15),
                                 NSAttributedStringKey.foregroundColor: UIColor.red]

if let regular = attrRegular as? [NSAttributedStringKey : NSObject]{
    part1 = NSMutableAttributedString(string: "first", attributes: regular)

}
if let bold = attrRegular as? [NSAttributedStringKey : NSObject]{
    part2 = NSMutableAttributedString(string: "second", attributes: bold)
}

if let boldWithColor = attrBoldWithColor as? [NSAttributedStringKey : NSObject]{
    part3 = NSMutableAttributedString(string: "third", attributes: boldWithColor)
}

combination.append(part1)
combination.append(part2)
combination.append(part3)

বৈশিষ্ট্যগুলির তালিকা দয়া করে এখানে অ্যাপল ডক্সে এনএস্যাট্রিবিউটেড স্ট্রিংকি দেখুন see


0

এটি করার জন্য দুর্দান্ত সহজ উপায়।

let text = "This is a colorful attributed string"
let attributedText = 
NSMutableAttributedString.getAttributedString(fromString: text)
attributedText.apply(color: .red, subString: "This")
//Apply yellow color on range
attributedText.apply(color: .yellow, onRange: NSMakeRange(5, 4))

আরো বিস্তারিত জন্য এখানে ক্লিক করুন; https://github.com/iOSTechHub/AttributedString

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