পাঠ্য সম্পত্তি সেট করার পরে ইউআইটিেক্সটভিউ শৈলী পুনরায় সেট করা হচ্ছে


145

আমার কাছে রয়েছে UITextView *_masterTextএবং কল পদ্ধতির পরে setTextসম্পত্তি ফন্টটি পুনরায় সেট করা হচ্ছে। আমি পরিবর্তন SDK 7. _masterText হয় এটা হচ্ছে IBOutlet, বিশ্বব্যাপী এবং বৈশিষ্ট্যাবলী স্টোরিবোর্ড মধ্যে সেট করা হয়। এটি কেবল আমি বা এটি সাধারণ এসডিকে বাগ?

@interface myViewController : UIViewController
{
  IBOutlet UITextView *_masterText;
}

@implementation myViewController

-(void)viewWillAppear:(BOOL)animated
{
    [_masterText setText:@"New text"];
}

উত্তর:


450

ঘন্টার পর ঘন্টা এটি নিয়ে বসে আমি বাগটি পেলাম। সম্পত্তি "নির্বাচনযোগ্য" = যদি কোনও হয় না তবে সেটটেক্সট ব্যবহার করার সময় এটি ফন্ট এবং ফন্টক্লোর পুনরায় সেট করবে।

সুতরাং নির্বাচনযোগ্য চালু করুন এবং বাগটি চলে গেছে is


15
এই আমাকে ডেকে, setText আগে Xcode মধ্যে 5. আমার কার্যসংক্রান্ত সাময়িকভাবে সেট নির্বাচনযোগ্য হয় এছাড়াও ঘটে = yes
Rollin_s

8
বাহ, কি হাস্যকর বাগ। অন্তর্দৃষ্টি জন্য ধন্যবাদ!
মীখা

3
তোমাকে অনেক অনেক ধন্যবাদ !
মাগুরিজিও

6
6.4 এখনও এই সমস্যা আছে
RndmTsk

4
এটি আইওএস 10 এ স্থির হয়েছে বলে মনে হচ্ছে, যদি এখনও আপনার আইওএস 9 বা তার চেয়ে নীচে লক্ষ্যবস্তু করা হয় তবে আপনার কাজটি করা উচিত।
ব্যবহারকারী 1184205

11

আমি একই ইস্যুতে ছুটে এসেছি (এক্সকোড 6.১ এ) এবং জন কোগানের উত্তর আমার পক্ষে কাজ করার সময় আমি খুঁজে পেয়েছি যে ইউআইটিেক্সটভিউ ক্লাসটি একটি বিভাগের সাথে বাড়ানো আমার বিশেষ প্রকল্পের জন্য আরও ভাল সমাধান ছিল।

ইন্টারফেস

@interface UITextView (XcodeSetTextFormattingBugWorkaround)
    - (void)setSafeText:(NSString *)textValue;
@end

বাস্তবায়ন

@implementation UITextView (XcodeSetTextFormattingBugWorkaround)
- (void)setSafeText:(NSString *)textValue
{
    BOOL selectable = [self isSelectable];
    [self setSelectable:YES];
    [self setText:textValue];
    [self setSelectable:selectable];
}
@end

1
এবং দ্রুতগতিতে:extension UITextView { func setSafeText(text: String){ let originalSelectable = selectable selectable = true self.text = text selectable = originalSelectable } }
সামান্য

8

আপনি যদি চান আপনার পাঠ্য দর্শনটি "কেবলমাত্র পঠনযোগ্য" হয় তবে আপনি সম্পাদনাযোগ্য এবং নির্বাচনযোগ্য এবং চেক করতে পারবেন ব্যবহারকারী ইন্টারঅ্যাকশন সক্ষম করা, এটির সাথে ইউআইটিেক্সটভিউটি আমার যেমন ইচ্ছা তেমন আচরণ করে

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

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


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

6

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

/*
    We set the text views Selectable value to YES temporarily, change text and turn it off again.
    This is a known bug that if the selectable value = NO the view loses its formatting.
 */
-(void)changeTextOfUiTextViewAndKeepFormatting:(UITextView*)viewToUpdate withText:(NSString*)textValue
{
    if(![viewToUpdate isSelectable]){
        [viewToUpdate setSelectable:YES];
        [viewToUpdate setText:textValue];
        [viewToUpdate setSelectable:NO];
    }else{
        [viewToUpdate setText:textValue];
        [viewToUpdate setSelectable:NO];
    }
}

1
উপক্লাসটি ইউআইটিএক্সেক্সটভিউ এবং ওভাররাইড সেটটেক্সট আরও ভাল হতে পারে এবং অ্যাপ্লিকেশনটিতে আপনার সাবক্লাস ব্যবহার করতে পারেন
পাওয়ারজ 1984

2

সম্পাদনা:

আইওএসে ইউআইটিেক্সটভিউয়ের জন্য ফন্ট সেট করা আমার জন্য কাজ করে যদি প্রথমে আপনি পাঠ্যটি সেট করেন এবং তারপরে আপনি ফন্টটি সেট করেন:

@property (nonatomic, weak) IBOutlet UITextView *masterText;

@implementation myViewController

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    _myTextView.text = @"My Text";

    _myTextView.font = [UIFont fontWithName:@"Helvetica.ttf" size:16]; // Set Font

}

এক্সআইবি ফাইলটিতে আপনি যদি আপনার ইউআইটিেক্সটভিউতে কিছু পাঠ্য যুক্ত করেন এবং ফন্ট বা রঙ পরিবর্তন করেন তবে এটি কার্যকর হবে।


হুম .. আমি সম্পত্তি ব্যবহার করি কিন্তু কোনও পরিবর্তন নেই।
Bżażej

ভুলে গেছেন [সুপার ভিউইল অ্যাপয়ার: অ্যানিমেটেড];
জর্দান মন্টেল

আমি এটি সম্পর্কে ভুলে গেছি, কিন্তু এটি কোনও প্রভাব ফেলেনি :(
B13ażej

আপনার এক্সকোডটি পরিষ্কার করুন এবং পুনরায় চালু করুন কারণ "_myTextView.font ..." লাইনটি ছাড়া এটি আমার পক্ষে ভাল কাজ করেছে - যদিও আমি XIB ফাইল থেকে ফন্টটি পরিবর্তন করি
জর্ডান

পরিষ্কার, পুনরায় আরম্ভ এবং কোন প্রভাব। প্রকল্প> আইওএস ডিপ্লোয়মেন্ট লক্ষ্য 7.0, বেস এসডিকে 7.0 লক্ষ্য হিসাবে একই সেটিংস।
Bżażej

2

এই সমস্যাটির জন্য আমি প্রায়শই ব্যবহার করি একটি দ্রুত সাবক্লাস সমাধান solution

class WorkaroundTextView: UITextView {
    override var text: String! {
        get {
            return super.text
        }
        set {
            let originalSelectableValue = self.selectable
            self.selectable = true
            super.text = newValue
            self.selectable = originalSelectableValue
        }
    }
}

2

এই সমস্যাটি এক্সকোড ৮-এ পুনরায় উত্থিত হয়েছিল I

এক্সটেনশনটি এতে পরিবর্তন করা হয়েছে:

extension UITextView{
    func setTextAvoidXcodeIssue(newText : String, selectable: Bool){
        isSelectable = true
        text = newText
        isSelectable = selectable
    }
}

এবং ইন্টারফেস বিল্ডারে নির্বাচনযোগ্য বিকল্পটি চেক করে।

এটি 'নির্বাচনের যোগ্য' পরামিতি থাকা খুব মার্জিত নয় তবে তা করবে।


1

আইওএস 8.3-এ, সেট টেক্সটের আগে হ্যাঁ "বেছে বেছে" সেট করার কাজটি আমার জন্য ঠিক করা হয়নি।

আমি আবিষ্কার করেছি স্টোরিবোর্ডে আমার "নির্বাচিত" সেট করা দরকার, এটি কাজ করার আগেও।


আপনি আমার দিনটি বাঁচিয়েছেন, আমি বিশ্বাস করি এটি কোকো টুচের আরও একটি হাস্যকর বাগ
ক্রিস


0

বিশিষ্ট পাঠ্য সহ আমার জন্য, আমাকে কেবল নিজের ক্ষেত্রটিতে সেটিংস স্থাপনের চেয়ে বৈশিষ্ট্য অভিধানে ফন্টটি সেট করা দরকার।


0

আমার এই সমস্যা হচ্ছে @ কেন স্টিলের উত্তরের উত্তরটির একটি স্বতন্ত্র-বান্ধব সমাধান। আমি ইউআইটিএক্সেক্সটভিউকে প্রসারিত করি এবং একটি গণিত সম্পত্তি যুক্ত করি।

extension UITextView {
    // For older Swift version output should be NSString!
    public var safeText:String!
        {
        set {
            let selectable = self.selectable;
            self.selectable = true;
            self.text = newValue;
            self.selectable = selectable;
        }
        get {
            return self.text;
        }
    }
}

আশা করি এটা সাহায্য করবে.


0

এটি 3 বছর হয়েছে এবং বাগটি এখনও এক্সকোড (7.3) এর সর্বশেষ স্থিতিশীল সংস্করণে বিদ্যমান রয়েছে। স্পষ্টতই অ্যাপল এটি বিকাশকারীদের দুটি বিকল্প দিয়ে শীঘ্রই যেকোন সময় ঠিক করতে পারবে না: বেছে নেওয়ার যোগ্য রেখে যাওয়া এবং ব্যবহারকারীর অন্তর্ভুক্তকরণটি মিথ্যা বা পদ্ধতি সুইজলিংয়ে সক্ষম করা হয়েছে।

আপনার পাঠ্যে একটি বোতাম থাকলে দেখুন পূর্বেরটি যথেষ্ট হবে না।

দ্রুত-নো-কোড-পরিবর্তন-প্রয়োজনীয় সমাধান:

import UIKit

extension UITextView {
    @nonobjc var text: String! {
        get {
            return performSelector(Selector("text")).takeUnretainedValue() as? String ?? ""
        } set {
            let originalSelectableValue = selectable
            selectable = true
            performSelector(Selector("setText:"), withObject: newValue)
            selectable = originalSelectableValue
        }
    }
}

উদ্দেশ্য গ:

#import <objc/runtime.h>
#import <UIKit/UIKit.h>

@implementation UITextView (SetTextFix)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Class class = [self class];

        SEL originalSelector = @selector(setText:);
        SEL swizzledSelector = @selector(xxx_setText:);

        Method originalMethod = class_getInstanceMethod(class, originalSelector);
        Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);

        BOOL didAddMethod =
        class_addMethod(class,
                    originalSelector,
                    method_getImplementation(swizzledMethod),
                    method_getTypeEncoding(swizzledMethod));

        if (didAddMethod) {
            class_replaceMethod(class,
                            swizzledSelector,
                            method_getImplementation(originalMethod),
                            method_getTypeEncoding(originalMethod));
        } else {
            method_exchangeImplementations(originalMethod, swizzledMethod);
       }
   });
}

- (void)xxx_setText:(NSString *)text {
    BOOL originalSelectableValue = self.selectable;
    self.selectable = YES;
    [self xxx_setText:text];
    self.selectable = originalSelectableValue;
}

@end

0

এই ইস্যুতে আলোচিত ওয়ার্ক-চারপাশ ব্যবহার করে, ইউআইটিেক্সটভিউতে এই এক্সটেনশনটি একটি setTextInCurrentStyle()ফাংশন সরবরাহ করে। আলেসান্দ্রো রানালদীর সমাধানের ভিত্তিতে তবে বর্তমানেকার আইসলেক্টেবল মানটি ফাংশনে পাস করার প্রয়োজন নেই।

extension UITextView{
    func setTextInCurrentStyle(_ newText: String) {
        let selectablePreviously = self.isSelectable
        isSelectable = true
        text = newText
        isSelectable = selectablePreviously
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.