রাউন্ডেড রেক্ট টেক্সট ফিল্ডটি পছন্দ করতে কীভাবে ইউটিআইটিভিউ ভিউ স্টাইল করবেন?


170

আমি একটি মন্তব্য রচয়িতা হিসাবে একটি পাঠ্য ভিউ ব্যবহার করছি।

বৈশিষ্ট্য পরিদর্শকটিতে আমি সীমানা শৈলীর বৈশিষ্ট্যের মতো কিছু খুঁজে পাচ্ছি না যাতে আমি বৃত্তাকার আয়তাকে ব্যবহার করতে পারি, এর মতো কিছু UITextField

সুতরাং, প্রশ্নটি হল: আমি কীভাবে একটি বৃত্তাকার আয়তনের UITextViewমতো একটি স্টাইল করতে পারি UITextField?


1
আপনি কি ব্যবহার না করে UITextFieldকেবল বন্ধ করতে পারেন userInteractionEnabled?
jowie

উত্তর:


285

আপনার বেছে নিতে হবে এমন কোনও অন্তর্নিহিত শৈলী নেই, এতে QuartzCoreফ্রেমওয়ার্কটি ব্যবহার করে কিছুটা কোড লেখা রয়েছে :

//first, you
#import <QuartzCore/QuartzCore.h>

//.....

//Here I add a UITextView in code, it will work if it's added in IB too
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(50, 220, 200, 100)];

//To make the border look very close to a UITextField
[textView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
[textView.layer setBorderWidth:2.0];

//The rounded corner part, where you specify your view's corner radius:
textView.layer.cornerRadius = 5;
textView.clipsToBounds = YES;

এটি কেবল ওএস 3.0.০ এবং তারপরের উপরে কাজ করে তবে আমি অনুমান করি যে এখন এটি ডি ফ্যাক্টো প্ল্যাটফর্ম।


47
আমি উপরের কোডটি নীচের শীর্ষে যুক্ত করা সীমাটি একটি ইউআইটিেক্সটফিল্ডের খুব কাছাকাছি দেখায়। [টেক্সটভিউ.লেয়ার সেটবোর্ডার কালার: [[[ইউআইকলার ধূসর রঙ] রঙ উইথঅ্যাল্ফা কম্পোনেন্ট: ০.৫] সিজি কালার]]; [টেক্সটভিউ.লেয়ার সেটবোর্ডার প্রস্থ: ২.০];
রব

12
অবশ্যই তা নিশ্চিত করুন: # আইম্পোর্ট <কোয়ার্টজকোর / কোয়ার্টজকোর.হ.> আমার সমস্যা ছিল কারণ আমি কোয়ার্টজকোর আমদানি করিনি

1
আমার মতো n00bs এর জন্য, নোটের যোগ্য: এই কোডটি দৃষ্টিতে রাখুনডিলডেডের সাথে ইনিউথনিবনেমে :-)
ব্রায়ান

1
আপনি কেবলমাত্র সেট করা সম্পত্তি UITextFieldসহ একটি ব্যবহার করতে পারেন - নীচে আমার পোস্ট দেখুন। borderStyleUITextBorderStyleRoundedRect
জওি

5
আইওএস 7 - 1.0 এর সীমানা প্রস্থ এবং .2 এর আলফা ডিফল্ট শৈলীর সাথে কাজ করে।
ক্যালেল ওয়েড

77

এই কোডটি আমার পক্ষে ভালভাবে কাজ করেছে:

    [yourTextView.layer setBackgroundColor: [[UIColor whiteColor] CGColor]];
    [yourTextView.layer setBorderColor: [[UIColor grayColor] CGColor]];
    [yourTextView.layer setBorderWidth: 1.0];
    [yourTextView.layer setCornerRadius:8.0f];
    [yourTextView.layer setMasksToBounds:YES];

4
আমি বলব যে 5px পাঠ্য ক্ষেত্রগুলির নিকটে, তবে এই উত্তরের ধূসর বর্ণটি নির্বাচিত উত্তরের চেয়ে ভাল।
পিটার ডিউইজ

2
অবশ্যই আপনাকে এই উত্তরের জন্য কোয়ার্টজকোর ফ্রেমওয়ার্ক যুক্ত করতে হবে এবং এটি # ইমপোর্ট <কোয়ার্টজকোর / কোয়ার্টজকোর.ই.এক দ্বারা আমদানি করতে হবে
লুকাশভেলটে

36

সুইফট 3 সংস্করণ

ইন্টারফেস বিল্ডারে টেক্সট ভিউ সেট আপ করার পরে।

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    textView.layer.cornerRadius = 5     
    textView.layer.borderColor = UIColor.gray.withAlphaComponent(0.5).cgColor
    textView.layer.borderWidth = 0.5  
    textView.clipsToBounds = true
}

সুইফট ২.২ সংস্করণ

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    textView.layer.cornerRadius = 5     
    textView.layer.borderColor = UIColor.grayColor().colorWithAlphaComponent(0.5).CGColor
    textView.layer.borderWidth = 0.5  
    textView.clipsToBounds = true
}

1
সমস্যাটি হ'ল এটি ধূসর নয়। ইউআইটিেক্সটফিল্ডের ফ্রেমের রঙ কিছুটা আলাদা।
মাকালেলে

1
.BorderWidth = 0.7 তৈরি করা এটি আইওএস ১১ এ
দেখায়

28

সম্পাদনা: আপনাকে আমদানি করতে হবে

#import <QuartzCore/QuartzCore.h>

কোণার ব্যাসার্ধ ব্যবহার করার জন্য।

এটি চেষ্টা করুন এটি নিশ্চিতভাবে কাজ করবে

UITextView* txtView = [[UITextView alloc] initWithFrame:CGRectMake(50, 50, 300, 100)];
txtView.layer.cornerRadius = 5.0;
txtView.clipsToBounds = YES;

রব যেমন এটি নির্ধারণ করেছে যে আপনি যদি সীমান্তের বর্ণটি একইরকম দেখতে চান UITextFieldতবে আপনাকে নীচের লাইনটি যুক্ত করে সীমানা প্রস্থকে ২.০ এবং বর্ণকে ধূসর করতে হবে need

[textView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]]; 
[textView.layer setBorderWidth:2.0];

2
আমি ভাবছিলাম কেন এটি কাজ করছে না? কোয়ার্টজকোর সম্পর্কে টিপোফের জন্য ধন্যবাদ।
এচিলন

23

আমি আসল চুক্তিটি চেয়েছিলাম, তাই আমি এর UIImageViewএকটি সংক্ষিপ্তসার হিসাবে যুক্ত করব UITextView। এটি UITextFieldউপরের থেকে নীচে গ্রেডিয়েন্ট সহ একটিতে স্থানীয় সীমানার সাথে মেলে :

textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];

এই আমি ব্যবহার করা ইমেজ:

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


2
আমি মনে করি আপনি টেক্সটভিউটিও ইউআইটিএক্সটেক্সট বর্ডার স্টাইল কোনওটিই রাখার দরকার নেই যদি আপনি এটি ইতিমধ্যে
এক্সকোডে

1
আমি পিএনজি চিত্রগুলি পুনরায় আপলোড করেছি
বেন প্যাকার্ড

5
কোনও ভাল না, ইউআইটিেক্সটভিউতে আপনি স্ক্রোল করার সাথে সাথে পটভূমি সরে যায়। অনুমান করুন আমাকে এগুলি সমস্ত প্যারেন্ট ইউআইভিউতে রাখতে হবে।
অলিভার পিয়ারমাইন

1
চমৎকার। এটি দুর্দান্ত দেখাচ্ছে: ডি
সুন ট্রডস্ল্যাভ

12

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

self.textField.frame = CGRectInset(self.textView.frame, 0, -2);

আপনার পাঠ্যের ক্ষেত্রের মতো দেখতে একই চেহারা হবে।

এবং জনের পরামর্শ অনুসারে , আপনার কোডের এই অংশটি [UIViewController viewDidLayoutSubviews]আইওএস 5.0+ এ রাখা উচিত।


1
এটি খুব সাধারণ ছিল এবং ঠিক কীভাবে এটি দেখতে চেয়েছিল ঠিক তা দেখায়। আমি স্রেফ ইউআইটিেক্সটফিল্ডের ফ্রেমটি ইউআইটিেক্সটভিউয়ের সাথে মেলে: সিজিআরেক্ট ফ্রেম = সেলফ.মিটেক্সটভিউ.ফ্রেমে; ফ্রেম.সাইজ.হাইট + = 2; self.myTextField.frame = ফ্রেম;
বায়িন ব্রায়ান

1
সুন্দর উত্তর। পরিষ্কার এবং সহজ। কোড রাখুন viewDidLayoutSubviews:(আইওএস 5.0+)।
জোন

1
ভাল লাগল, শেষ পর্যন্ত আমি এই সাথেই গিয়েছিলাম n মনে রাখবেন যে আমি জনের মন্তব্য পুনরায় ব্যবহার না করা পর্যন্ত এটি কাজ করে না: ভিউডিডলআউটআউটসভিউগুলি:
ড্যাভার

1
এটি ছিল দ্রুততম এবং সর্বোত্তম দেখাচ্ছে।
ওয়েস্টন

5

সর্বোত্তম প্রভাবের জন্য আপনাকে একটি কাস্টম (প্রসারিত) পটভূমি চিত্র ব্যবহার করতে হবে। এটির মতোই UITextFieldবৃত্তাকার বৃত্তটি অঙ্কিত হয়।


4

প্রোগ্রামিং ছাড়াই এটি করার একটি উপায় আমি পাঠ্যক্ষেত্রের ব্যাকগ্রাউন্ডকে স্বচ্ছ করে তোলা, তারপরে একটি রাউন্ড রেক্ট বাটন রাখুন। এটি নিষ্ক্রিয় করতে বাটন সেটিংস পরিবর্তন করতে এবং Disable adjusts imageচেকবক্সটি চেকবাক্স নিশ্চিত করে নিন।


4

আপনি DCKit নামক আমার লাইব্রেরিটি পরীক্ষা করতে চাইতে পারেন ।

আপনি সরাসরি UIViewথেকে গোলাকার কোণার পাঠ্য দর্শন (পাশাপাশি পাঠ্যক্ষেত্র / বোতাম / সমতল ) তৈরি করতে সক্ষম হবেন Interface Builder:

ডিসিকিট: বর্ডার ইউআইটিেক্সটভিউ

এটিতে আরও অনেক দরকারী বৈশিষ্ট্য রয়েছে যেমন বৈধতা সহ পাঠ্য ক্ষেত্র, সীমানা সহ নিয়ন্ত্রণ, ড্যাশযুক্ত সীমানা, বৃত্ত এবং হেয়ারলাইন ভিউ ইত্যাদি has


4

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

নীচের সমাধানটি একটি ইউআইটিেক্সটভিউ যা সীমান্তের জন্য এটির নিজস্ব ইউআইটিেক্সটফিল্ড সরবরাহ করে। এটি আমার সম্পূর্ণ সমাধানের ছাঁটা ডাউন সংস্করণ (যা একইভাবে ইউআইটিেক্সটভিউতে "স্থানধারক" সমর্থন যোগ করে) এবং এখানে পোস্ট করা হয়েছিল: https://stackoverflow.com/a/36561236/1227119

// This class implements a UITextView that has a UITextField behind it, where the 
// UITextField provides the border.
//
class TextView : UITextView, UITextViewDelegate
{
    var textField = TextField();

    required init?(coder: NSCoder)
    {
        fatalError("This class doesn't support NSCoding.")
    }

    override init(frame: CGRect, textContainer: NSTextContainer?)
    {
        super.init(frame: frame, textContainer: textContainer);

        self.delegate = self;

        // Create a background TextField with clear (invisible) text and disabled
        self.textField.borderStyle = UITextBorderStyle.RoundedRect;
        self.textField.textColor = UIColor.clearColor();
        self.textField.userInteractionEnabled = false;

        self.addSubview(textField);
        self.sendSubviewToBack(textField);
    }

    convenience init()
    {
        self.init(frame: CGRectZero, textContainer: nil)
    }

    override func layoutSubviews()
    {
        super.layoutSubviews()
        // Do not scroll the background textView
        self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
    }

    // UITextViewDelegate - Note: If you replace delegate, your delegate must call this
    func scrollViewDidScroll(scrollView: UIScrollView)
    {
        // Do not scroll the background textView
        self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
    }        
}

3

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

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


3

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


3
#import <QuartzCore/QuartzCore.h>
- (void)viewDidLoad{
  UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(50, 220, 200, 100)];
  textView.layer.cornerRadius = 5;
  textView.clipsToBounds = YES;
  [textView.layer setBackgroundColor: [[UIColor whiteColor] CGColor]];
  [textView.layer setBorderColor: [[UIColor grayColor] CGColor]];
  [textView.layer setBorderWidth: 1.0];
  [textView.layer setCornerRadius:8.0f];
  [textView.layer setMasksToBounds:YES];
  [self.view addSubView:textview];
}

2

আপনি এমন একটি পাঠ্য ক্ষেত্র তৈরি করতে পারেন যা কোনও পাঠ্য দৃশ্যের উপরে এই জাতীয় ইভেন্টগুলি গ্রহণ করে না:

CGRect frameRect = descriptionTextField.frame;
frameRect.size.height = 50;
descriptionTextField.frame = frameRect;
descriptionTextView.frame = frameRect;
descriptionTextField.backgroundColor = [UIColor clearColor];
descriptionTextField.enabled = NO;
descriptionTextView.layer.cornerRadius = 5;
descriptionTextView.clipsToBounds = YES;

অথবা ইন্টারফেস বিল্ডারে কেবল একটি পাঠ্য ক্ষেত্র তৈরি করুন। তারপরে কোডে উচ্চতা নির্ধারণ করুন (যেহেতু ইন্টারফেস নির্মাতা আপনাকে দেয় না)। সিজিআরেক্ট ফ্রেমরেক্ট = self.textField.frame; ফ্রেমরেক্ট.সাইজ.হাইট = 50; self.textField.frame = ফ্রেমরেক্ট;
অডিব

2

আপনি যদি নিজের কন্ট্রোলার কোডটি পরিষ্কার রাখতে চান তবে আপনি নীচের মত ইউআইটিেক্সটভিউ সাবক্লাস করতে পারেন এবং ইন্টারফেস বিল্ডারে শ্রেণীর নাম পরিবর্তন করতে পারেন।

RoundTextView.h

#import <UIKit/UIKit.h>
@interface RoundTextView : UITextView
@end

RoundTextView.m

#import "RoundTextView.h"
#import <QuartzCore/QuartzCore.h>
@implementation RoundTextView
-(id) initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.333] CGColor]];
        [self.layer setBorderWidth:1.0];
        self.layer.cornerRadius = 5;
        self.clipsToBounds = YES;
    }
    return self;
}
@end

1

এখানে আমার সমাধান:

- (void)viewDidLoad {
    [super viewDidLoad];


    self.textView.text = self.messagePlaceholderText;
    self.textView.layer.backgroundColor = [[UIColor whiteColor] CGColor];
    self.textView.layer.borderColor = [[[UIColor grayColor] colorWithAlphaComponent:0.3] CGColor];
    self.textView.layer.borderWidth = 0.5;
    self.textView.layer.cornerRadius = 5.5f;
    self.textView.layer.masksToBounds = YES;
    self.textView.textColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
}

- (void)textViewDidBeginEditing:(UITextView *)textView {
    if (textView == self.tvMessage) {
        // Delete placeholder text
        if ([self.textView.text isEqualToString:self.messagePlaceholderText]) {
            self.textView.text = @"";
            self.textView.textColor = [UIColor blackColor];
        }
    }
}

- (void)textViewDidEndEditing:(UITextView *)textView {
    if (textView == self.tvMessage) {
        // Write placeholder text
        if (self.textView.text.length == 0) {
            self.textView.text = self.messagePlaceholderText;
            self.textView.textColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
        }
    }
}

0

এটা সম্ভব বলে আমি মনে করি না। তবে আপনি UITableView1 বিভাগ এবং 1 খালি ঘর দিয়ে (গোষ্ঠীযুক্ত) করতে পারেন এবং এটি আপনার পাত্রে হিসাবে ধারক হিসাবে ব্যবহার করতে পারেন UITextView


0

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


0

আইওএস 7-তে নিম্নলিখিতগুলি ইউআইটিেক্সটফিল্ড সীমানাকে পুরোপুরি মিলিয়েছে (অন্তত আমার চোখে):

textField.layer.borderColor = [[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor];
textField.layer.borderWidth = 0.5;
textField.layer.cornerRadius = 5;
textField.clipsToBounds = YES;

বিশেষ কিছু আমদানির দরকার নেই।

@ উভিয়ার এবং @ হানুমানদেবকে ধন্যবাদ যার উত্তরগুলি আমার প্রায় সেখানে চলে গেছে :)


-1

কীভাবে ঠিক:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 32)];
textField.borderStyle = UITextBorderStyleRoundedRect;
[self addSubview:textField];

প্রশ্ন পাঠ্যদর্শন সম্পর্কে হয়।
আজিক আবদুল্লাহ

দুঃখিত - হ্যাপি স্ট্যাক প্রতিক্রিয়া ট্রিগার। কেন জানতে তারা শুধু একটি ব্যবহার করতে পারছিল না আগ্রহী হতে চান UITextFieldসঙ্গে userInteractionEnabledসেট NO
জুই


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