অনুলিপি কীভাবে অক্ষম করুন, কাটা, নির্বাচন করুন, ইউআইটিেক্সটভিউতে সমস্ত নির্বাচন করুন


110

UITextViewএর কপি, কাটা, নির্বাচন করুন, সকল নির্বাচন কার্যকারিতা ডিফল্ট যখন আমি পর্দায় ঠাসা প্রদর্শন করা হয়। তবে, আমার প্রকল্পে UITextFieldকেবলমাত্র পঠনযোগ্য। আমার এই কার্যকারিতাটির প্রয়োজন নেই। কীভাবে এই বৈশিষ্ট্যটি অক্ষম করবেন আমাকে বলুন।


3
স্থান [UIMenuController sharedMenuController] .menuVisible = NO; ইন - (বিওএল) ক্যান পারফর্মএকশন: (এসইএল) পদক্ষেপ সহ সেন্ডার: (আইডি) প্রেরক পদ্ধতি।
রাভোরিনন্দন

উত্তর:


108

পেস্টবোর্ড ক্রিয়াকলাপ অক্ষম করার সহজতম উপায় হ'ল এমন একটি সাবক্লাস তৈরি করা যা আপনি মঞ্জুরি দিতে চান না এমন ক্রিয়াগুলির জন্য ফিরে আসার পদ্ধতিটিকে UITextViewওভাররাইড করে :canPerformAction:withSender:NO

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(paste:))
        return NO;
    return [super canPerformAction:action withSender:sender];
}

আরো দেখুন UIResponder


1
@ আরপেটরিখম, আমি আপনাকে সমাধান ব্যবহার করেছি, অনুলিপি / পেস্ট / কাট / নির্বাচন / নির্বাচন করুন সমস্ত বিকল্প অক্ষম আছে তবে এখনও প্রতিস্থাপন আসবে ... | বিআইইউ | বিকল্পগুলি সংজ্ঞায়িত করুন। আমি সেই সম্পূর্ণ মেনুটি অক্ষম করতে চাই।
অমিত ধাস

3
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }- সমস্ত বিকল্প অবরুদ্ধ করতে
ইসলাম কিউ।

এটি দুর্দান্ত, তবে আমি কীভাবে এটি ইউআইএসবারবারের জন্য করব তা জানি না - কারণ ভিতরে ভিতরে একটি পাঠ্য ক্ষেত্রও রয়েছে আমি ভেবেছিলাম যে আমি কোনও ইউআইসন্ধানবারের সাবক্লাসের পদ্ধতিটি ওভাররাইট করতে পারি তবে এটি দুর্ভাগ্যজনকভাবে কার্যকর হয় না। এই জন্য কোন ধারণা?
বোরচোরো

আমার অনেক নিয়ন্ত্রণ আছে কীভাবে কেবল একটি নিয়ন্ত্রণে কপির পেস্টের অনুমতি দেওয়া যায়?
গাউচো

এটি ইউআইটিএক্সেক্সটভিউয়ের জন্য কাজ করছে না, যদিও আমি এসও এর বেশ কয়েকটি স্থানে প্রস্তাবিত সমাধানটি দেখেছি। কেউ কীভাবে এটি করতে পারে তা বুঝতে পেরেছেন?
পিগপকেট

67

সাবক্লাস ইউআইটিেক্সটভিউ দেখুন এবং ওভাররাইট ক্যানকেকমফার্সআস্ট রিসপন্ডার:

- (BOOL)canBecomeFirstResponder {
    return NO;
}

দ্রষ্টব্য, এটি কেবল অ-সম্পাদনাযোগ্য UITextViews এর জন্য প্রযোজ্য! সম্পাদনাযোগ্যগুলিতে এটি পরীক্ষা করা হয়নি ...


আমি মনে করি return NO;উপর - (BOOL)canPerformAction:(SEL)action withSender:(id)senderপদ্ধতি একটি ভাল বিকল্প।
ইসলাম প্র।

29

আপনি যদি আপনার সমস্ত UITextView অ্যাপ্লিকেশনটিতে কাট / অনুলিপি / পেস্ট অক্ষম করতে চান তবে আপনি এর সাথে একটি বিভাগ ব্যবহার করতে পারেন :

@implementation UITextView (DisableCopyPaste)

- (BOOL)canBecomeFirstResponder
{
    return NO;
}

@end

এটি একটি সাবক্লাসিং সংরক্ষণ করে ... :-)


3
আপনি কেবল এটি আপনার /, ফাইলটিতে রাখতে পারেন যেখানে আপনার এই আচরণটি প্রয়োজন।
মার্কাস_পি

4
এটি কেবলমাত্র একটি পার্শ্ব-প্রতিক্রিয়া UITextViewহিসাবে কাজ করে এবং প্রত্যাশিত আচরণ করা থেকে বাধা দেয় যখন উদাহরণস্বরূপ, এটি সম্পাদনাযোগ্য এবং স্পর্শ পায়। এটি ওভাররাইড করার মতো অনেক কিছুই canPerformAction:withSender:; প্রোটোকলটি এটাই।
জেডিসি

16
আপনি কোনও বিভাগটি ব্যবহার করে কোনও পদ্ধতি নিরাপদে ওভাররাইড করতে পারবেন না। এটি অনির্ধারিত আচরণ। কোনও পদ্ধতি নিরাপদে ওভাররাইড করার জন্য আপনাকে অবশ্যই সাবক্লাস করতে হবে।
রব নেপিয়ার

2
দ্রষ্টব্য: এটি আপনার অ্যাপ্লিকেশনের সমস্ত ইউআইটিেক্সটভিউতে প্রযোজ্য। বেশিরভাগ সময় আদর্শ নয়।
bbrame

2
এছাড়াও নোট করুন যে অ্যাপল এর বিপরীতে পরামর্শ দিয়েছিল : "যদি কোনও বিভাগে ঘোষিত কোনও পদ্ধতির নামটি মূল শ্রেণীর একটি পদ্ধতির মতো বা একই শ্রেণীর অন্য শ্রেণির কোনও পদ্ধতি (বা এমনকি একটি সুপারক্লাস) হয় তবে আচরণটি হ'ল রানটাইমের সময় কোন পদ্ধতির প্রয়োগকরণ ব্যবহৃত হয় সে সম্পর্কে অপরিবর্তিত ... [এবং] স্ট্যান্ডার্ড কোকো বা কোকো টাচ ক্লাসে পদ্ধতি যুক্ত করার জন্য বিভাগগুলি ব্যবহার করার সময় সমস্যা দেখা দিতে পারে ""
রব

29

এটি ছিল আমার পক্ষে সবচেয়ে কার্যকর সমাধান:

UIView *overlay = [[UIView alloc] init];  
[overlay setFrame:CGRectMake(0, 0, myTextView.contentSize.width, myTextView.contentSize.height)];  
[myTextView addSubview:overlay];  
[overlay release];

থেকে: https://stackoverflow.com/a/5704584/1293949


3
ভাল, এখানে সাবক্লাসিং নেই!
মার্টিন রেখল

7
আমি এখানে নালী-টেপ এবং বিলিং তারের পদ্ধতির পছন্দ করি। আমি +1 টি আপনি আবার পারা :) এর পরিবর্তে, এখানে একটি ফ্যাশন তারকা হল: i.imgur.com/EXLFt1Z.jpg
জেডিসি

22

@ আরপেটরিচ উত্তর আমার পক্ষে কাজ করেছে। কাউকে কিছুটা সময় সাশ্রয় করার ক্ষেত্রে আমি প্রসারিত কোডটি পোস্ট করছি।

আমার ক্ষেত্রে আমি যাই হোক না কেন কোনও পপআপ চাই না, তবে আমি চাই ইউআইটিেক্সটফিল্ডটি প্রথম প্রতিক্রিয়াশীল হতে সক্ষম হোক।

দুর্ভাগ্যক্রমে, আপনি টেক্সটফিল্ডটি আলতো চাপলে এবং ধরে রাখলে আপনি এখনও ম্যাগনিফায়ার পপআপ পাবেন।

@interface NoSelectTextField : UITextField

@end

@implementation NoSelectTextField

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(paste:) ||
        action == @selector(cut:) ||
        action == @selector(copy:) ||
        action == @selector(select:) ||
        action == @selector(selectAll:) ||
        action == @selector(delete:) ||
        action == @selector(makeTextWritingDirectionLeftToRight:) ||
        action == @selector(makeTextWritingDirectionRightToLeft:) ||
        action == @selector(toggleBoldface:) ||
        action == @selector(toggleItalics:) ||
        action == @selector(toggleUnderline:)
        ) {
            return NO;
    }
    return [super canPerformAction:action withSender:sender];
}

@end

সুইফট 4

class NoSelectTextField: UITextField {

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(paste(_:)) ||
            action == #selector(cut(_:)) ||
            action == #selector(copy(_:)) ||
            action == #selector(select(_:)) ||
            action == #selector(selectAll(_:)) ||
            action == #selector(delete(_:)) ||
            action == #selector(makeTextWritingDirectionLeftToRight(_:)) ||
            action == #selector(makeTextWritingDirectionRightToLeft(_:)) ||
            action == #selector(toggleBoldface(_:)) ||
            action == #selector(toggleItalics(_:)) ||
            action == #selector(toggleUnderline(_:)) {
            return false
        }
        return super.canPerformAction(action, withSender: sender)
    }

}

1
এই হিসাবে ভাল জন্য একটি দ্রুত সংস্করণ পোস্ট করুন। ধন্যবাদ.
সালমান খকওয়ানি

@ পিঞ্চ: টিএনএক্স। এখনও iOS 12.1.3 এ জল ধরে রেখেছে।
YvesLeBorg

20

যদি আপনার স্ক্রোল করার জন্য ইউআইটিএক্সেক্সটভিউয়ের প্রয়োজন না হয়, তবে সবচেয়ে সহজ সমাধান যা সাব-শ্রেণিবদ্ধকরণের সাথে জড়িত না কেবল তা হল পাঠ্য দর্শনের জন্য কেবল ব্যবহারকারী ইন্টারঅ্যাকশন অক্ষম করা:

textField.userInteractionEnabled = NO;

2
এটি লিঙ্ক ইত্যাদিতে আলতো চাপতে পারে যদি টেক্সটভিউতে এটি থাকে। লক্ষ করা উচিত যে এটি নির্বাচন / অনুলিপি / পেস্টটি গোপন করতে চাওয়ার জন্য ভাল সমাধান নয়, তবে কিছুটা ইন্টারঅ্যাকশন সক্ষম করে রাখে।
বারফুন

3
ঠিক আছে, আমি ভেবেছিলাম এটি সুস্পষ্ট হবে।
লুক রেডপথ

আমি একটি গেমের ছবিগুলির জন্য লেবেল হিসাবে পাঠ্য ক্ষেত্রগুলি ব্যবহার করছি এবং আমি চাই না যে ম্যাগনিফাইং গ্লাসটি প্রদর্শিত হবে এবং পাঠ্যটি অনুলিপি করার কোনও কারণ নেই। এটি আমার পক্ষে দুর্দান্ত কাজ করে। আমি একটি ইউআইবিউব ভিউতে স্টাইলযুক্ত পাঠ্য ব্যবহার করছি এবং একই লাইনটি সেখানে কাজ করে।
জেএসকারি

15

সবচেয়ে সহজ উপায় হ'ল ইউআইটিেক্সটভিউয়ের একটি সাবক্লাস তৈরি করা যা ক্যান পারফর্মঅ্যাকশনকে ওভাররাইড করে: সেন্ডার সহ:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender    
{    
     [UIMenuController sharedMenuController].menuVisible = NO;  //do not display the menu
     [self resignFirstResponder];                      //do not allow the user to selected anything
     return NO;
}

অন্য কোনও কিছুই পাঠ্য টাইপ করতে সক্ষম হবার জন্য এটি সর্বোত্তম সমাধান এবং টেক্সট-ফিল্ডে ট্যাপগুলি আর 'বিঘ্নিত' করতে দেয় না। এটি ওপি যা চেয়েছিল তাই করে এবং আরও অনেক কিছু।
hlpcoding

13

আমি যখন আইওএস 7-এ ক্যান পারফর্ম এ্যাকশনটিতে কোনও নম্বর ফিরিয়ে দেব না তখন আমি এরকম অনেক ত্রুটি পেয়ে যাব:

<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

আমার সমাধানটি নিম্নলিখিত:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];
    }];
    return [super canPerformAction:action withSender:sender];
}

কৌশলটি হ'ল মেনু নিয়ামকটিকে মূল সারিতে পরবর্তী চক্রটিতে (এটি প্রদর্শিত হওয়ার ঠিক পরে) লুকিয়ে রাখা।


সত্যিই সুন্দর. একমাত্র সমস্যাটি হ'ল আমার কাছে 2 টি পাঠ্যদর্শন এবং একটি পাঠ্য ফিল্ড রয়েছে এবং আমি কেবলমাত্র টেক্সটভিউ ক্ষেত্রগুলিতে অনুলিপিটি আটকাতে চাই। ক্যান পারফর্মএকশন কে কে পরিচয় দিলেন? প্রেরক পরিবর্তনশীল UIMenuController হয়
গাউচো

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

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

10

কোনও ইউআইটিেক্সটভিউতে পুরো নির্বাচন / অনুলিপি / মেনু আটকানোর এটি সহজতম উপায়

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{    
    [UIMenuController sharedMenuController].menuVisible = NO;
    return NO;    
}

ইউআইটিেক্সটফিল্ডের জন্যও কাজ করে। ভাগ করে নেওয়ার জন্য ধন্যবাদ.
গৌরব শ্রীবাস্তব

1
আমি উপরের কোডটি ব্যবহার করছি এখনও আমি কীভাবে অক্ষম করব তা মেনু পেয়ে যাচ্ছি দয়া করে আমাকে সহায়তা করুন।
বিট্টু

4

আইওএস 7 যেহেতু ইউআইটিেক্সটভিউতে একটি সম্পত্তি রয়েছে:

 @property(nonatomic,getter=isSelectable) BOOL selectable;

এটি পাঠ্য নির্বাচনের অনুমতি দেওয়া থেকে একটি দৃষ্টিভঙ্গি রাখে। আমার জন্য দুর্দান্ত কাজ করে


4

আপনি যদি একটি সঙ্গে কীবোর্ড প্রতিস্থাপন করতে খুঁজছি হয়, এর কথা বলা যাক UIPickerযেমন inputView(একটি যেমন কোর্স টুলবার সঙ্গে inputAccesotyView), তারপর এই কার্যসংক্রান্ত যথাসাধ্য সাহায্যের ...

  • বাস্তবায়ন textFieldShouldBeginEditing:
  • ভিতরে রাখা textField.userInteractionEnabled = NO;
  • তারপরে আপনি যখন UIPickerViewবন্ধটি বন্ধ করতে চলেছেন, এটিকে হ্যাঁ সেট করুন।

এটি করার মাধ্যমে, আপনি টিপতে পারবেন UITextFieldএবং বিকল্পগুলি বেছে নেওয়ার জন্য UIPickerViewএই মুহুর্তে আপনার UITextFieldপছন্দসই, কোনও স্পর্শ ইভেন্টের প্রতিক্রিয়া জানাতে পারবেন না (এতে কাটা, অনুলিপি এবং পেস্টের জন্য স্পর্শ এবং হোল্ড রয়েছে)। যাইহোক, আপনি যখন এটি বন্ধ করে দিচ্ছেন UIPickerViewতবে আপনাকে এটি UIPickerViewপুনরায় অ্যাক্সেস করতে সক্ষম হবেন না তবে আপনাকে এটি আবার YES এ সেট করে রাখতে হবে ।

ব্যর্থ হওয়ার একমাত্র মুহুর্তটি যখন ব্যবহারকারী ট্যাপ করে ধরে রাখার মাধ্যমে শুরু করে UITextView, তারপরে আপনি কাটা অনুলিপিটি দেখতে পাবেন এবং প্রথমবারের জন্য আবার পেস্ট করুন। এজন্য আপনার ইনপুটগুলি সর্বদা যাচাই করা উচিত। এটি আমি ভাবতে সবচেয়ে সহজ। অন্য বিকল্পটি ছিল UILabelকেবলমাত্র পঠনযোগ্য পাঠ্যের জন্য একটি ব্যবহার করা কিন্তু আপনি এর থেকে দুর্দান্ত কার্যকারিতাটি মিস করেন UITextView


4

সাবক্লাস ইউআইটিেক্সটভিউ - সুইফট ৪.০

     override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return false
    }

কেমন অদ্ভুত? এটি এখনও "আটকান" বিকল্পটি দেখায় তবে টিপলে এটি করবেন না ...
আইওএস ফ্লো

4

আপনি যদি পপআপটি অক্ষম করতে চান UITextFieldতবে এই UITextFieldDelegateপদ্ধতিটি টগল করার চেষ্টা করুন isUserInteractionEnabled

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    textField.isUserInteractionEnabled = false
    return true
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    textField.isUserInteractionEnabled = true
    return true
}

3

স্টোরিবোর্ডে এটি সহজেই করা যায় (এক্সকোড 6)। বৈশিষ্ট্য পরিদর্শকতে কেবল সম্পাদনযোগ্য এবং নির্বাচনের যোগ্য নির্বাচন ছাড়ুন। আপনি এখনও পাঠ্য ভিউ স্ক্রোল করতে পারেন।এখানে চিত্র বর্ণনা লিখুন


3

এটি আমার পক্ষে কাজ করেছে। নিশ্চিত হয়ে নিন যে আপনি পাঠ্য ভিউতে পদত্যাগপত্রে প্রথম প্রতিবেদককে কল করছেন

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
  [self.textView resignFirstResponder];
  return NO;
}

2

আমি এখানে পাঠ্য নির্বাচন + ম্যাগনিফায়ার অক্ষম করার জন্য একটি কার্যকরী জবাব সরবরাহ করেছি , সক্ষম ক্লাইকেবল লিঙ্কগুলি আশা করি যা সহায়তা করে:

দীর্ঘ সময় চেষ্টার পরে, আমি কেবলমাত্র ইউআইএলএক্সপ্রেস ভিউ সাবক্লাসে অ্যাডগাস্টারআরগনাইজারকে ওভাররাইড করে পাঠ্য নির্বাচন, ম্যাগনিফায়ারিং এবং ডেটা সনাক্তকরণ (লিঙ্কগুলি ক্লিকযোগ্য ইত্যাদি) রোধ করতে পেরেছি কেবলমাত্র ইউআইএলংপ্রেসজেস্টার সনাক্তকারীকে বিলম্ব করতে স্পর্শ করতে:

UIUnselectableTextView.m

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && gestureRecognizer.delaysTouchesEnded)
    {
        [super addGestureRecognizer:gestureRecognizer];
    }
}


2

আপনি এই স্টোরবোর্ডে এই বাক্সগুলি আনচেক করে এটি ঠিক করতে পারেন:

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

বা আপনি যেমন অগ্রগতি হিসাবে সেট করতে পারেন:

textView.selectable = false
textView.editable = false

1

আমি এটা করেছি. আমার উপর UITextViewআমি খুব সহজেই কাটা, অনুলিপি, নির্বাচন ইত্যাদি বিকল্প অক্ষম করেছি।

আমি UIViewযেখানে রেখেছিলাম সেখানে একই স্থানে রেখেছি UITextView, self.viewএবং নীচে একটি touchDelegateপদ্ধতি যুক্ত করেছি :

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *scrollTouch=[touches anyObject];
    if(scrollTouch.view.tag==1)
    {
        NSLog(@"viewTouched");
        if(scrollTouch.tapCount==1)
            [textView1 becomeFirstResponder];
        else if(scrollTouch.tapCount==2)
        {
            NSLog(@"double touch");
            return;
        }

    }
}

এবং এটা আমার জন্য কাজ করে। ধন্যবাদ.


1

দ্রুতগতি

textView.selectable = false // disable text selection (and thus copy/paste/etc)

সম্পর্কিত

textView.editable = false // text cannot be changed but can still be selected and copied
textView.userInteractionEnabled = false // disables all interaction, including scrolling, clicking on links, etc.

1

আপনি যদি আপনার ইউআইটিেক্সটভিউতে একটি কাস্টম বিকল্প যুক্ত করতে চান তবে বিদ্যমান ফাংশনগুলি অক্ষম করতে চান তবে আপনি সুইফট 3 এ এটি করেন :

অনুলিপিটি অক্ষম করতে, পেস্ট করুন, ফানসিওনালিটি কেটে একটি সাবক্লাস তৈরি করুন এবং নিম্নলিখিতগুলি ওভাররাইড করুন:

override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return false
} 

ভিউকন্ট্রোলারে আপনার কাস্টমটেক্সটভিউতে আপনার বিকল্পগুলি যুক্ত করতে নিম্নলিখিতগুলি যুক্ত করুন:

  let selectText = UIMenuItem(title: "Select", action: #selector(ViewController.selected))

    func selected() {

    if let selectedRange = textView.selectedTextRange, let 
     selectedText = textView.text(in: selectedRange) {

     }


    print("User selected text: \(selectedText)")

    }

1

এই পদ্ধতিটি নির্বাচন নির্বাচন করুন, সমস্ত নির্বাচন করুন, মেনু আটকান সম্পূর্ণভাবে অক্ষম করবে। যদি আপনি এখনও অন্য কিছু পদক্ষেপ পান তবে নীচের হিসাবে যদি কেবলমাত্র এটির সাথে যুক্ত করুন।

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender // This is to disable select / copy / select all / paste menu
    {
        if (action == @selector(copy:) || action == @selector(selectAll:) || action == @selector(select:) || action == @selector(paste:))
            return NO;
        return [super canPerformAction:action withSender:sender];
    }

0

আপনি কেবল এই জাতীয় বিভাগ তৈরি করতে পারেন:

UITextView + + Selectable.h

@interface UITextView (Selectable)

@property (nonatomic, assign, getter = isTextSelectable) bool textSelectable;

@end

UITextView + + Selectable.m

#import "UITextView+Selectable.h"

#import <objc/runtime.h>

#define TEXT_SELECTABLE_PROPERTY_KEY @"textSelectablePropertyKey"

@implementation UITextView (Selectable)

@dynamic textSelectable;

-(void)setTextSelectable:(bool)textSelectable {
    objc_setAssociatedObject(self, TEXT_SELECTABLE_PROPERTY_KEY, [NSNumber numberWithBool:textSelectable], OBJC_ASSOCIATION_ASSIGN);
}

-(bool)isTextSelectable {
    return [objc_getAssociatedObject(self, TEXT_SELECTABLE_PROPERTY_KEY) boolValue];
}

-(bool)canBecomeFirstResponder {
    return [self isTextSelectable];
}

@end

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

0

সাবক্লাসিং UITextViewএবং ওভাররাইডিং - (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizerঅযাচিত ক্রিয়াকলাপ অক্ষম করার আরেকটি সম্ভাবনা।

gestureRecognizerক্রিয়াটি যুক্ত করা উচিত কিনা তা নির্ধারণ করতে -অবজেক্টের শ্রেণিটি ব্যবহার করুন ।


0

(SWIFT) আপনি যদি মেনু অপশন বা ম্যাগনিফাইং গ্লাসের কোনওটিই না দিয়ে কেবল একটি বেসিক পাঠ্য ক্ষেত্র চান তবে ইউআইটিেক্সটফিল্ডের একটি সাবক্লাসটি ইঙ্গিতরর রেকগনিজারশোল্ডারবাগিনে মিথ্যা প্রত্যাবর্তন করুন:

class TextFieldBasic: UITextField {
    override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {

        return false
    }
}

এটি পাঠ্য ক্ষেত্রে সমস্ত স্পর্শ কার্যকারিতা বাইপাস করবে কিন্তু তবুও অক্ষরগুলি যুক্ত করতে / অপসারণ করতে আপনাকে পপআপ কীবোর্ড ব্যবহার করার অনুমতি দেয়।

আপনি যদি স্টোরিবোর্ডটি ব্যবহার করছেন তবে সদ্য নির্মিত ক্লাসটি পাঠ্য ক্ষেত্রে নির্দিষ্ট করে দিন বা আপনি যদি পাঠ্য ক্ষেত্রটি অগ্রগতিমূলকভাবে তৈরি করছেন:

var basicTextField = TextFieldBasic()
basic = basicTextField(frame: CGRectMake(10, 100, 100,35))
basic.backgroundColor = UIColor.redColor()
self.view.addSubview(basic)

basic.becomeFirstResponder()

0
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool 
{
    NSOperationQueue .mainQueue().addOperationWithBlock({ () -> Void in   

        [UIMenuController .sharedMenuController() .setMenuVisible(false, animated: true)]

    })
    return super.canPerformAction(action, withSender: sender)}

0

সুইফট 3

এটি করার জন্য, আপনাকে আপনার ইউআইটিেক্সটভিউ সাবক্লাস করতে হবে এবং এই পদ্ধতিটি রাখা উচিত।

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if (action == #selector(copy(_:))) {
            return false
        }

        if (action == #selector(cut(_:))) {
            return false
        }

        if (action == #selector(paste(_:))) {
            return false
        }

        return super.canPerformAction(action, withSender: sender)
    }

0

ইউআইটিেক্সটভিউতে দুটি সম্পত্তি রয়েছে যা আপনার যা প্রয়োজন তা করবে: isSelectable এবং isEdable

মিথ্যাতে isEditable সেট সম্পাদনা করতে ব্যবহারকারী টেক্সট এড়াতে হবে এবং সেটিং isSelectable মিথ্যাতে আপনি আপনার textView ভিতরে পাঠ্য নির্বাচন তাই এই কর্ম মেনু দেখানো হবে তা প্রতিরোধ করা হবে যদি ব্যবহারকারীরা এড়াতে হবে।


0

রেফারেন্সের জন্য নমুনা কোডটি সন্ধান করুন:

 override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(copy(_:)) || action == #selector(paste(_:)) || action == #selector(UIResponderStandardEditActions.paste(_:)) ||
            action == #selector(replace(_:withText:)) ||
            action == #selector(UIResponderStandardEditActions.cut(_:)) ||
        action == #selector(UIResponderStandardEditActions.select(_:)) ||
        action == #selector(UIResponderStandardEditActions.selectAll(_:)) ||
        action == #selector(UIResponderStandardEditActions.delete(_:)) ||
        action == #selector(UIResponderStandardEditActions.makeTextWritingDirectionLeftToRight(_:)) ||
        action == #selector(UIResponderStandardEditActions.makeTextWritingDirectionRightToLeft(_:)) ||
        action == #selector(UIResponderStandardEditActions.toggleBoldface(_:)) ||
        action == #selector(UIResponderStandardEditActions.toggleItalics(_:)) ||
        action == #selector(UIResponderStandardEditActions.toggleUnderline(_:)) ||
        action == #selector(UIResponderStandardEditActions.increaseSize(_:)) ||
        action == #selector(UIResponderStandardEditActions.decreaseSize(_:))

       {
            return false
        }

        return true
    }

-1

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }জায়গায় ব্যবহার করুন textFieldShouldBeginEditing

class ViewController: UIViewController , UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        //Show date picker
        let datePicker = UIDatePicker()
        datePicker.datePickerMode = UIDatePickerMode.date
        textField.tag = 1
        textField.inputView = datePicker
    }

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        if textField.tag == 1 {
            textField.text = ""
            return false
        }

        return true
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField.tag == 1 {
            textField.text = ""
            return false
        }

        return true
    }
}

স্টপপস্টেকশন.সুইফ্ট নামে একটি নতুন ক্লাস তৈরি করুন

import UIKit

class StopPasteAction: UITextField {

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return false
    }
}

আপনার বর্তমান পাঠ্যফিল্ড সহ নতুন শ্রেণীর ক্লাস যুক্ত করুন

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

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