ইউআইটিেক্সটফিল্ড বাম ভিউ / রাইটভিউ প্যাডিং iOS7 এ


94

আইওএস 7-তে একটি ইউআইটিেক্সটফিল্ডের বামদর্শন এবং ডানদর্শন দেখুনগুলি পাঠ্যক্ষেত্রের সীমানার খুব কাছে।

আমি কীভাবে এই আইটেমগুলিতে কিছু (অনুভূমিক) প্যাডিং যুক্ত করতে পারি?

আমি ফ্রেমটি সংশোধন করার চেষ্টা করেছি, তবে কাজ হয়নি

uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];    
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;

দয়া করে নোট করুন যে আমি টেক্সটফিল্ডের পাঠ্যে প্যাডিং যুক্ত করতে আগ্রহী নই, ইউআইটিেক্সটবার্ডার স্টাইলনোন সহ ইউআইটিেক্সটফিল্ডের জন্য এই সেট প্যাডিংয়ের মতো



4
না, এটি কোনও পাঠ্য ক্ষেত্রে বাম ভিউ হিসাবে প্রদর্শিত চিত্রটি ইন্ডেন্ট করার বিষয়ে জিজ্ঞাসা করছে। পাঠ্যটি নিজেই ইন্ডেন্ট করা হচ্ছে না। তার কোডটি ব্যবহার করে দেখুন এবং আপনি দেখতে পাচ্ছেন যে কোনও চিত্রের বামদর্শনটি কোনও চিত্রের কোনও প্যাডিং ছাড়াই পাঠ্য ক্ষেত্রের বাম প্রান্তের বিপরীতে চিত্র স্থাপন করে। দেখতে দেখতে কুরুচিপূর্ণ।
পাথর

উত্তর:


90

এই বিষয়ে আমি নিজেই কাজ করছি এবং এই সমাধানটি ব্যবহার করেছি:

- (CGRect) rightViewRectForBounds:(CGRect)bounds {

    CGRect textRect = [super rightViewRectForBounds:bounds];
    textRect.origin.x -= 10;
    return textRect;
}

এটি চিত্রটি আইওএস 7 এ প্রান্তের বিপরীতে সঙ্কুচিত করার পরিবর্তে ডান দিক থেকে 10 দিয়ে চিত্র সরিয়ে নিয়ে যাবে।

অতিরিক্তভাবে, এটি একটি সাবক্লাসে ছিল UITextField, যা এটি দ্বারা তৈরি করা যেতে পারে:

  1. একটি নতুন ফাইল তৈরি করুন UITextFieldযা ডিফল্টের পরিবর্তে একটি সাবক্লাসNSObject
  2. - (id)initWithCoder:(NSCoder*)coderচিত্রটি সেট করার জন্য একটি নতুন পদ্ধতি যুক্ত করুন

    - (id)initWithCoder:(NSCoder*)coder {
        self = [super initWithCoder:coder];
    
        if (self) {
    
            self.clipsToBounds = YES;
            [self setRightViewMode:UITextFieldViewModeUnlessEditing];
    
            self.leftView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"textfield_edit_icon.png"]];
        }
    
        return self;
    }
    
  3. আপনাকে আমদানি করতে হতে পারে #import <QuartzCore/QuartzCore.h>

  4. rightViewRectForBoundsউপরের পদ্ধতিটি যুক্ত করুন

  5. ইন্টারফেস বিল্ডারে, আপনি সাবক্লাস করতে চান এমন টেক্সটফিল্ডটি ক্লিক করুন এবং এই নতুন সাবক্লাসের নামে শ্রেণীর বৈশিষ্ট্যটি পরিবর্তন করতে চান


এটির জন্য আইবিডিজিনেবল কীভাবে ব্যবহার করবেন?
রিদ্ধি

: সর্বশেষ সংস্করণের জন্য অথবা যদি আপনি 2020. দর্শন এটি দেখছেন stackoverflow.com/a/55041786/6596443
AKINNUBI ABIOLA সিলভেস্টার

167

একটি অনেক সহজ সমাধান, যার সুবিধা গ্রহণ করে contentMode:

    arrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"down_arrow"]];
    arrow.frame = CGRectMake(0.0, 0.0, arrow.image.size.width+10.0, arrow.image.size.height);
    arrow.contentMode = UIViewContentModeCenter;

    textField.rightView = arrow;
    textField.rightViewMode = UITextFieldViewModeAlways;

সুইফ্ট 3-এ,

    let arrow = UIImageView(image: UIImage(named: "arrowDrop"))
    if let size = arrow.image?.size {
        arrow.frame = CGRect(x: 0.0, y: 0.0, width: size.width + 10.0, height: size.height)
    }
    arrow.contentMode = UIViewContentMode.center
    self.textField.rightView = arrow
    self.textField.rightViewMode = UITextFieldViewMode.always

4
আপনি কেন্দ্রের পরিবর্তে স্কেলএস্পেক্টফিটও ব্যবহার করতে পারেন ... যদি চিত্রের আকারটি সঠিক ফ্রেমের সাথে মেলে না।
মিহির মেহতা

আমি আপনার উদাহরণটি ইউআইবাটন (ইউআইআইমেজভিউয়ের পরিবর্তে) এর জন্য ব্যবহার করেছি যখন এর ধরণটি ইনফ্লাইট।
ওহাদএম

আমি খুঁজে পেয়েছি যে ".সেন্টার" এর পরিবর্তে "। রাইট" এটি এটিকে আরও একটি বিল্ট-ইন সার্চ বারের মতো দেখতে যেমন যোগাযোগ অ্যাপ্লিকেশনটির মতো করে তোলে। এটির জন্য দুর্দান্ত সমাধান, এটি পোস্ট করার জন্য ধন্যবাদ।
জেমস টুমি

অথবা আপনি যদি নকশা বিনোদনের বিষয়ে সুনির্দিষ্ট হতে চান তবে চিত্রটি বাম দিকে রাখুন এবং তারপরে সঠিক প্যাডিং অর্জনের জন্য প্রস্থ বৃদ্ধি করুন
জোভঞ্জভানোভিচ

4
এটি আইওএস 13 এবং এক্সকোড 11 বিটা 7 এর সাথে আর কাজ করবে বলে মনে হচ্ছে না যদিও আইওএস 11/12 তে ঠিক কাজ করে।
প্যাট্রিকডটস্টার

49

সবচেয়ে সহজ উপায় হ'ল বাম ভিউ / রিগভিউতে একটি ইউআইভিউ যুক্ত করা এবং ইউআইভিউতে একটি চিত্র ভিউ যুক্ত করা, আপনার পছন্দ মত যে কোনও জায়গায় ইউআইভিউয়ের অভ্যন্তরে ইমেজভিউয়ের উত্সটি সামঞ্জস্য করুন, এটি আমার জন্য মনোমুগ্ধকর মত কাজ করে। এটিতে কোডের কয়েকটি লাইন দরকার

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 5, 26, 26)];
imgView.image = [UIImage imageNamed:@"img.png"];

UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
[paddingView addSubview:imgView];
[txtField setLeftViewMode:UITextFieldViewModeAlways];
[txtField setLeftView:paddingView];

UIViewContentMode কাজ করে না তবে এই উত্তরটি কবজির মতো কাজ করে!
নিগং

14

এটি সুইফ্টের জন্য দুর্দান্ত কাজ করে:

let imageView = UIImageView(image: UIImage(named: "image.png"))
imageView.contentMode = UIViewContentMode.Center
imageView.frame = CGRectMake(0.0, 0.0, imageView.image!.size.width + 20.0, imageView.image!.size.height)
textField.rightViewMode = UITextFieldViewMode.Always
textField.rightView = imageView

'স্ট্রিং' টাইপের মান প্রত্যাশিত আর্গুমেন্ট টাইপ 'ইউআইআইমেজ? তে রূপান্তর করতে পারে না? "

8

এটি আমার পক্ষে কাজ করে

UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 20)];
self.passwordTF.leftView = paddingView;
self.passwordTF.leftViewMode = UITextFieldViewModeAlways;

এটা আপনাকে সাহায্য করতে পারে।


6

আমি এই সমাধানটি পছন্দ করি কারণ এটি কোডের একক লাইন দিয়ে সমস্যার সমাধান করে

myTextField.layer.sublayerTransform = CATransform3DMakeTranslation(10.0f, 0.0f, 0.0f);

দ্রষ্টব্য: .. বা 2 যদি আপনি কোয়ার্টজকোরকে একটি লাইন অন্তর্ভুক্ত করে বিবেচনা করেন :)



4
তবে কেবল বাম প্যাডিংয়ের সমস্যাটি ডান প্যাডিংয়ের সাথে সমস্যার সমাধান হচ্ছে না
carmen_munich

4
ডান ভিউ.লেয়ার.সুব্লেয়ার ট্রান্সফর্ম = কেট্রান্সফর্ম 3 ডি মেকট ট্রান্সলেশন (-10.0f, 0.0f, 0.0f) ব্যবহার করে আমার আরও ভাল ফলাফল হয়েছে, তবে পদ্ধতির জন্য +1
থাইবাড ডেভিড

এটি মনে রাখবেন এটি পাঠ্য ক্ষেত্রের "পরিষ্কার" বোতামটি ডানদিকেও সরিয়ে ফেলবে, যা এটি পাঠ্য ক্ষেত্রের প্রান্ত পেরিয়ে যেতে পারে। আপনার যদি পরিষ্কার বোতামের প্রয়োজন না হয় তবে এটি দুর্দান্ত পদ্ধতি, অন্যথায় নাও হতে পারে।
টম হ্যারিংটন

4

এটি করার সর্বোত্তম উপায় হ'ল ইউআইটিেক্সটফিল্ড এবং .m ফাইলের সাবক্লাস ব্যবহার করে ক্লাস করা

  #import "CustomTextField.h"
  #import <QuartzCore/QuartzCore.h>
  @implementation CustomTextField


- (id)initWithCoder:(NSCoder*)coder 
 {
self = [super initWithCoder:coder];

if (self) {

    //self.clipsToBounds = YES;
    //[self setRightViewMode:UITextFieldViewModeUnlessEditing];

    self.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,15,46)];
    self.leftViewMode=UITextFieldViewModeAlways;
      }

return self;

}

এটি করার মাধ্যমে আপনার স্টোরিবোর্ড বা xib এ যান এবং পরিচয় পরিদর্শকের উপর ক্লিক করুন এবং শ্রেণি বিকল্পে আপনার নিজস্ব "কাস্টম টেক্সটফিল্ড" দিয়ে ইউআইটিেক্সটফিল্ড প্রতিস্থাপন করুন।

দ্রষ্টব্য: আপনি যদি কেবল টেক্সটফিল্ডের জন্য অটো লেআউট সহ প্যাডিং দেন তবে আপনার অ্যাপ্লিকেশনটি চলবে না এবং কেবল ফাঁকা স্ক্রিনটি প্রদর্শন করবে।


4

ইমেজভিউ বা চিত্রকে হেরফেরের পরিবর্তে আমরা ডানদৃষ্টির জন্য অ্যাপল দ্বারা সরবরাহিত কোনও পদ্ধতি ওভাররাইড করতে পারি।

class CustomTextField : UITextField { 

override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
    let offset = 5
    let width  = 20
    let height = width
    let x = Int(bounds.width) - width - offset
    let y = offset
    let rightViewBounds = CGRect(x: x, y: y, width: width, height: height)
    return rightViewBounds
}}

এবং একইভাবে বাম দৃশ্যের জন্য আমরা ফানকের নীচে ওভাররাইড করতে পারি।

override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
    /*return as per requirement*/

}

3

আমি এটি কোথাও খুঁজে পেয়েছি ...

UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
paddingView.backgroundColor = [UIColor clearColor];
itemDescription.leftView = paddingView;
itemDescription.leftViewMode = UITextFieldViewModeAlways;

[self addSubview:itemDescription];

4
এটি কেবল পাঠ্যে প্যাডিং যুক্ত করে, যা প্রশ্নকর্তা সন্ধান করছেন না। তিনি একটি পরিষ্কার বাম ভিউ চান না। বাম ভিউ হিসাবে প্রদর্শিত একটি চিত্র তিনি চান displayed
পাথর

আপনি কেবল প্যাডিংভিউতে চিত্রটি যুক্ত করতে পারেন।
ম্যাথিউস ওয়েবার

3

সুইফট 5

class CustomTextField: UITextField {
    func invalidate() {
        let errorImage =  UIImageView(image: UIImage(named: "errorImage"))
        errorImage.frame = CGRect(x: 8, y: 8, width: 16, height: 16)
        rightView = UIView(frame: CGRect(x: 0, y: 0, width: 32, height: 32))
        rightView?.addSubview(errorImage)
        rightViewMode = .always
    }
}

আপনি চাইবেন:

  • সাবক্লাস UITextField
  • সাবক্ল্যাসড পাঠ্য ক্ষেত্রের মধ্যে একটি অকার্যকর পদ্ধতি লিখুন
  • অবৈধ পদ্ধতিতে UIView আপনার চিত্রের চেয়ে বড় তৈরি করুন
  • আপনার চিত্রটি ভিউয়ের মধ্যে রাখুন
  • ভিউ বরাদ্দ করুন UITextField.rightView

2

এখানে একটি সমাধান দেওয়া হল:

 UIView *paddingTxtfieldView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 42)]; // what ever you want 
 txtfield.leftView = paddingTxtfieldView;
 txtfield.leftViewMode = UITextFieldViewModeAlways;

1

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

উদাহরণ

- (CGRect)textRectForBounds:(CGRect)bounds{
     CGRect textRect = [super textRectForBounds:bounds];
     textRect.origin.x += 10;
     textRect.size.width -= 10;
     return textRect;
}

1

নীচের উদাহরণটি হ'ল একটি আইকন হিসাবে বাম দৃশ্যে অনুভূমিক প্যাডিং যুক্ত করার জন্য - আপনি UIViewটেক্সটফিল্ডের বাম দৃশ্য হিসাবে যে কোনওটি ব্যবহার করতে চান এমন প্যাডিং যুক্ত করার জন্য আপনি একই জাতীয় ব্যবহার করতে পারেন ।

UITextFieldসাবক্লাসের ভিতরে :

static CGFloat const kLeftViewHorizontalPadding = 10.0f;

@implementation TextFieldWithLeftIcon
{
  UIImage *_image;
  UIImageView *_imageView;
}

- (instancetype)initWithFrame:(CGRect)frame image:(UIImage *)image
{
  self = [super initWithFrame:frame];
  if (self) {
    if (image) {
      _image = image;
      _imageView = [[UIImageView alloc] initWithImage:image];
      _imageView.contentMode = UIViewContentModeCenter;
      self.leftViewMode = UITextFieldViewModeAlways;
      self.leftView = _imageView;
    }
  }
  return self;
}

#pragma mark - Layout 

- (CGRect)leftViewRectForBounds:(CGRect)bounds
{
  CGFloat widthWithPadding = _image.size.width + kLeftViewHorizontalPadding * 2.0f;
  return CGRectMake(0, 0, widthWithPadding, CGRectGetHeight(bounds));
}

যদিও আমরা এখানে একটি সাবক্লাসিং UITextFieldকরছি, আমি বিশ্বাস করি এটিই সবচেয়ে পরিষ্কার পদ্ধতি।


1
- (CGRect)rightViewRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.size.width - 40, 0, 40, bounds.size.height);
}

যদি এটি UITextFieldএম্বেড থাকে তবে আপনি UISearchBarকীভাবে UISearchBarআপনার UITextFieldসাবক্লাসটি ব্যবহার করতে বলবেন ?
ক্রিশোজ

1

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

UIImageView *emailRightView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
emailRightView.contentMode = UIViewContentModeScaleAspectFill;
emailRightView.image = [UIImage imageNamed:@"icon_email.png"];
emailTextfield.rightViewMode = UITextFieldViewModeAlways;
emailTextfield.rightView = emailRightView;

আমার ইমেজভিউর ফ্রেমের 35 টিটি আমার ইমেল টেক্সটফিল্ডের উচ্চতা উপস্থাপন করে, এটি আপনার প্রয়োজনের সাথে সামঞ্জস্য করতে নির্দ্বিধায়।


1

আমি নিজেই এই সমস্যাটি পেয়েছি এবং এখন পর্যন্ত সবচেয়ে সহজ সমাধানটি হ'ল চিত্রের প্রতিটি পাশের প্যাডিং যুক্ত করার জন্য আপনার চিত্রটি সংশোধন করা!

আমি 10 পিক্সেল স্বচ্ছ প্যাডিং যুক্ত করতে আমার পিএনজি চিত্রটি পরিবর্তন করেছি এবং এটি কোনও কোডিং ছাড়াই ভালভাবে কাজ করে!


1

আপনি যদি বাম ভিউ হিসাবে কোনও ইউআইআইমেজভিউ ব্যবহার করছেন তবে আপনাকে এই কোডটি ব্যবহার করতে হবে:

সতর্কতা: ভিউওয়েল অ্যাপ্লিকেশন বা ভিউডিড অ্যাপের ভিতরে ব্যবহার করবেন না

-(UIView*)paddingViewWithImage:(UIImageView*)imageView andPadding:(float)padding
{
    float height = CGRectGetHeight(imageView.frame);
    float width =  CGRectGetWidth(imageView.frame) + padding;

    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];

    [paddingView addSubview:imageView];

    return paddingView;
}

1

আমি আমার ভিউকন্ট্রোলার ক্লাসে একটি কাস্টম পদ্ধতি তৈরি করেছি, যেমন দেখানো বেলো:

- (void) modifyTextField:(UITextField *)textField
{
    // Prepare the imageView with the required image
    uint padding = 10;//padding for iOS7
    UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];    
    iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);

    // Set the imageView to the left of the given text field.
    textField.leftView = iconImageView;
    textField.leftViewMode = UITextFieldViewModeAlways;
}

এখন আমি সেই পদ্ধতিটি ( viewDidLoadপদ্ধতির) অভ্যন্তরে কল করতে পারি এবং আমার TextFieldsযে কোনওটিকে সেই পদ্ধতিতে প্রেরণ করতে এবং ডান এবং বাম উভয়ের জন্য প্যাডিং যুক্ত করতে পারি এবং কোডের কেবল একটি লাইন লিখে পাঠ্য এবং পটভূমি রঙ দিতে পারি:

[self modifyTextField:self.firstNameTxtFld];

এটি আইওএস 7 এ পুরোপুরি কাজ করেছে! আশা করি এটি এখনও iOS 8 এবং 9 এ কাজ করে!

আমি জানি যে অতিরিক্ত ভিউ যুক্ত করা এটি কিছুটা ভারী বস্তুটি বোঝা হতে পারে। তবে অন্যান্য সমাধানে অসুবিধা সম্পর্কে উদ্বিগ্ন হয়ে গেলে আমি নিজেকে এই পদ্ধতির প্রতি আরও পক্ষপাতদুষ্ট এবং এইভাবে ব্যবহার করার ক্ষেত্রে আরও নমনীয় বলে মনে করি। ;)

আশা করি এই উত্তরটি কারও অন্য একটি সমাধান বের করার জন্য সহায়ক বা দরকারী হতে পারে।

চিয়ার্স!


1

এটি যেমনটি আমি খুঁজছি ঠিক তেমনভাবে আমার জন্য কাজ করে:

func addImageViewInsideMyTextField() {
    let someView = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 24))
    let imageView = UIImageView(image: UIImage(named: "accountImage"))
    imageView.frame = CGRect(x: 16, y: 0, width: 24, height: 24)
    imageView.contentMode = .scaleAspectFit
    someView.addSubview(imageView)

    self.myTextField.leftView = someView
    self.myTextField.leftViewMode = .always
}

1

আইওএস 13 এবং এক্সকোড 11 যেহেতু এটিই আমাদের জন্য কাজ করে তা একমাত্র সমাধান।

// Init of custom UITextField
override init(frame: CGRect) {
    super.init(frame: frame)

    if let size = myButton.imageView?.image?.size {
        myButton.frame = CGRect(x:0, y: 0, width: size.width, height: size.height)

        let padding: CGFloat = 5
        let container = UIView(frame: CGRect(x:0, y: 0, width: size.width + padding, height: size.height))
        container.addSubview(myButton)

        myButton.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            myButton.topAnchor.constraint(equalTo: container.topAnchor),
            myButton.leftAnchor.constraint(equalTo: container.leftAnchor),
            myButton.bottomAnchor.constraint(equalTo: container.bottomAnchor),
            myButton.rightAnchor.constraint(equalTo: container.rightAnchor, constant: -padding),
        ])

        textField.rightViewMode = .always
        textField.rightView = container
    }
}

উপরের উত্তরগুলি আমার পক্ষে কাজ করে না, এটি কাজ করে।
মার্ক ডিলান বি মার্কাডো

1

// ইউআইটিেক্সটফিল্ডের রাইটভিউ সেট করুন, দ্রুত 4.2TxtPass.rightViewMode = UITextField.ViewMode.always let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 18)) imageView.contentMode = UIView.ContentMode.scaleAspectFit let image = UIImage(named: "hidepass") imageView.image = image let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 28, height: 18)) rightView.addSubview(imageView) rightView.contentMode = UIView.ContentMode.left TxtPass.rightView = rightView


0

একটি কৌশল: ইউআইআইএজভিউ ভিউ সমেত একটি ইউআইভিউ যুক্তরাজ্যকে ইউআইটিএক্সফিল্ডে ডানদর্শন হিসাবে যুক্ত করুন। এই ইউআইভিউভটি অবশ্যই আকারে আরও বড় হতে হবে, এখন এর বামদিকে ইউআইআইমেজভিউটি রাখুন। সুতরাং ডান থেকে স্থানের একটি প্যাডিং থাকবে।

// Add a UIImageView to UIView and now this UIView to UITextField - txtFieldDate
UIView *viewRightIntxtFieldDate = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 30)]; 
// (Height of UITextField is 30px so height of viewRightIntxtFieldDate = 30px)
UIImageView *imgViewCalendar = [[UIImageView alloc] initWithFrame:CGRectMake(0, 10, 10, 10)];
[imgViewCalendar setImage:[UIImage imageNamed:@"calendar_icon.png"]];
[viewRightIntxtFieldDate addSubview:imgViewCalendar];
txtFieldDate.rightViewMode = UITextFieldViewModeAlways;
txtFieldDate.rightView = viewRightIntxtFieldDate;

0

সহজতম উপায় হ'ল পাঠ্যক্ষেত্রটি কেবল কাস্টমের পরিবর্তে রাউন্ডরেক্ট হিসাবে পরিবর্তন করুন এবং যাদুটি দেখুন। :)


0

সুইফট 2 এর জন্য, আমি ব্যবহার করি

...
        self.mSearchTextField.leftViewMode = UITextFieldViewMode.Always
        let searchImg = UIImageView(image: UIImage(named: "search.png"))
        let size = self.mSearchTextField.frame.height
        searchImg.frame = CGRectMake(0, 0, size,size)
        searchImg.contentMode = UIViewContentMode.ScaleAspectFit
        self.mSearchTextField.leftView = searchImg
...


0

সাধারণ পদ্ধতির:

textField.rightViewMode = .always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 25, height: 15))
textField.contentMode = .scaleAspectFit
imageView = UIImage(named: "imageName")
textField.rightView = imageView

দ্রষ্টব্য: অনুভূমিক প্যাডিংয়ের অনুমতি দিতে দৈর্ঘ্যের চেয়ে দৈর্ঘ্য কম হওয়া উচিত।


0

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

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

আমি একটি স্পিনার যুক্ত করেছি তবে rightViewবাক্সের বাইরে (আইওএস 13 এ) এটি 20 ডিক্সারে ডানদিকে 20 পিক্সেল স্থানান্তরিত হয় clearButton। আমি যাদু নম্বরগুলি ব্যবহার করতে পছন্দ করি না কারণ অ্যাপল দ্বারা যে কোনও সময়ে ক্লিয়ারবটন এবং ডানউইউ ভিউয়ের অবস্থান পরিবর্তন হতে পারে। ইউআই ডিজাইনের অভিপ্রায়টি "স্পিনার যেখানে পরিষ্কার বোতাম" তাই আমার সমাধানটি ইউআইটিেক্সটফিল্ডকে সাবক্লাস করা ও ওভাররাইড করা হয়েছিল rightViewRect(forBounds)

override func rightViewRect(forBounds bounds: CGRect) -> CGRect {

    // Use clearButton's rectangle
    return self.clearButtonRect(forBounds: bounds)
}

নীচে একটি কার্যকারী উদাহরণ (সান স্টোরিবোর্ড):

//------------------------------------------------------------------------------
class myCustomTextField: UITextField {

    override func rightViewRect(forBounds bounds: CGRect) -> CGRect {

        // Use clearButton rectangle
        return self.clearButtonRect(forBounds: bounds)
    }
}

//------------------------------------------------------------------------------
class myViewController: UIViewController {

    var activityView: UIActivityIndicatorView = {
        let activity = UIActivityIndicatorView()
        activity.startAnimating()
        return activity
    }()

    @IBOutlet weak var searchTextField: myCustomTextField!

    //------------------------------------------------------------------------------
    // MARK: - Lifecycle
    //------------------------------------------------------------------------------
    override func viewDidLoad() {

        super.viewDidLoad()

        searchTextField.rightView = activityView
        searchTextField.rightViewMode = .never // Hide spinner
        searchTextField.clearButtonMode = .never // Hide clear button

        setupUIForTextEntry()
    }

    // ...
    // More code to switch between user text entry and "search progress" 
    // by calling setupUI... functions below
    // ...

    //------------------------------------------------------------------------------
    // MARK: - UI
    //------------------------------------------------------------------------------
    func setupUIForTextEntry() {

        // Hide spinner
        searchTextField.rightViewMode = .never

        // Show clear button
        searchTextField.clearButtonMode = .whileEditing
        searchTextField.becomeFirstResponder()
    }

    //------------------------------------------------------------------------------
    func setupUIForSearching() {

        // Show spinner
        searchTextField.rightViewMode = .always

        // Hide clear button
        searchTextField.clearButtonMode = .never
        searchTextField.resignFirstResponder()
    }

    //------------------------------------------------------------------------------

}

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