ইউআইটিেক্সটফর্ডার স্টাইলনোন দিয়ে ইউআইটিেক্সটফিল্ডের জন্য প্যাডিং সেট করুন


398

আমি আমার জন্য একটি কাস্টম পটভূমি ব্যবহার করতে চেয়েছিলেন UITextFields। এটি সুন্দর দেখাতে আমাকে ব্যবহার UITextBorderStyleNoneকরতে হবে তা বাদে এটি কাজ করে । এটি কোনও প্যাডিং ছাড়াই পাঠ্যটিকে বামদিকে আটকে রাখতে বাধ্য করে।

আমি কি কোনও প্যাডিং ম্যানুয়ালি সেট করতে পারি যাতে এটি UITextBorderStyleRoundedRectআমার কাস্টম ব্যাকগ্রাউন্ড চিত্র ব্যবহার না করে দেখতে অনুরূপ ?

উত্তর:


837

এই সঠিক পরিস্থিতির জন্য বাম প্যাডিং সেট করতে আমি একটি ঝরঝরে সামান্য হ্যাক পেয়েছি।

মূলত, আপনি যে প্যাডিংয়ের UITextFieldআকার চান তা খালি দেখার জন্য আপনি বামদর্শন সম্পত্তিটি সেট করেছেন :

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

আমার জন্য একটি কবজ মত কাজ!

ইন সুইফট 3 / সুইফট 4 , এটা যে করে কাজ করা যেতে পারে

let paddingView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 20))
textField.leftView = paddingView
textField.leftViewMode = .always

1
ঠিক আমার যা প্রয়োজন, ডানদিকে প্যাডিংয়ের দরকার ছিল যা বেশিরভাগই অবশ্যই ছিল। ধন্যবাদ!
সিজি

@ লুকাস আমি এই উত্তরটিতে স্বীকৃতি যোগ করেছি, গৃহীত উত্তর। প্রথম লাইন. সম্পাদনা: উফ, সম্ভবত আমি সংরক্ষণ করিনি? নাকি আমার সম্পাদনা বাতিল হয়ে গেল? যে কোনও উপায়ে, ভিনসেন্ট একটি স্বতঃপরিমাণে যোগ করেছেন, তাই এর জন্য হ্যাঁ!
এরিক গোল্ডবার্গ

1
এআরসি ব্যবহার করে, কেন আমি *paddingViewএকাধিক পাঠ্য ক্ষেত্রগুলির সাথে পুনরায় ব্যবহার করি তবে আমার অ্যাপ্লিকেশনটি কেন স্থির হয় এবং প্রচুর সিপিইউ ব্যবহার করে ?
মাফিন ম্যান

3
এটি একটি খারাপ সমাধান, আরও ভাল নেট নেপ ফ্লিংকের জন্য যান। একটিতে সংস্করণ মোড প্যাডিং অন্তর্ভুক্ত নয়।
জ্যাসেক কাভিসিń

3
এটি একাধিক পাঠ্যক্ষেত্রের সাথে কাজ করছে না। স্রেফ এত বেশি স্মৃতি গ্রহণ করে এবং পরে ক্রাশ হয়।
বার্ডকেজ

177

আমি এই বিভাগটি বাস্তবায়ন তৈরি করেছি এবং এটি .mফাইলের শীর্ষে যুক্ত করেছি ।

@implementation UITextField (custom)
    - (CGRect)textRectForBounds:(CGRect)bounds {
        return CGRectMake(bounds.origin.x + 10, bounds.origin.y + 8,
                          bounds.size.width - 20, bounds.size.height - 16);
    }
    - (CGRect)editingRectForBounds:(CGRect)bounds {
        return [self textRectForBounds:bounds];
    }
@end

লিওট ব্লাউসিয়াক লিঙ্কটি বন্ধ করে দিয়েছে Based এটা তোলে সহজ করলো তারপর একটি সম্পূর্ণ নতুন উপশ্রেণী তৈরি, এবং এছাড়াও সহজ তারপর অতিরিক্ত যোগ UIView। তবুও, মনে হচ্ছে এমন কোনও পাঠ্য ক্ষেত্রের ভিতরে প্যাডিং নিয়ন্ত্রণ করতে সক্ষম না হওয়ায় কিছু অনুপস্থিত।

সুইফট 4 সমাধান:

class CustomTextField: UITextField {
    struct Constants {
        static let sidePadding: CGFloat = 10
        static let topPadding: CGFloat = 8
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return CGRect(
            x: bounds.origin.x + Constants.sidePadding,
            y: bounds.origin.y + Constants.topPadding,
            width: bounds.size.width - Constants.sidePadding * 2,
            height: bounds.size.height - Constants.topPadding * 2
        )
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return self.textRect(forBounds: bounds)
    }
}

6
এটি বিভাগগুলি ওভাররাইড পদ্ধতি সম্পর্কে সতর্কতা ছুড়ে দেয়। তাদের দমন করতে এই উত্তর দেখুন ।
pdenya

5
আমি এটি কোনও বিভাগে না করা পছন্দ করি, তবে এটি গ্রহণযোগ্য উত্তরের চেয়ে একটি ক্লিনার সমাধান।
বব ভর্ক

2
নিজের রোলিংয়ের পরিবর্তে এই জাতীয় কোনও কিছুর জন্য সিজিআরেক্টইনসেট () ব্যবহার করা ভাল। এটি দেখতে আরও পরিষ্কার পরিচ্ছন্ন রয়েছে: সিজিআরেক্টইনসেট (সীমানা, 10, 8) রিটার্ন করুন;
ডেনিস মুন্সি

1
@ শাশওয়াত হ্যাঁ, আপনি যে কোনও প্যাডিং চাইবেন তা নির্দিষ্ট করতে পারেন
এজ আক্পিনার

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

139

এক্সকোড> 6 এর জন্য একটি সুইফ্ট 3 সংস্করণ, যেখানে আপনি ইন্টারফেস বিল্ডার / স্টোরিবোর্ডে ইনসেট মানটি সম্পাদনা করতে পারেন।

import UIKit

@IBDesignable
class FormTextField: UITextField {

    @IBInspectable var inset: CGFloat = 0

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: inset, dy: inset)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return textRect(forBounds: bounds)
    }

}

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


1
আমি আমার ফর্ম পাঠ্য ক্ষেত্রটি দেখতে পাচ্ছি না।
Okysabeni

2
আমার এই লাইনটি যুক্ত করার দরকার ছিলoverride func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
মাইকেল

2
এই উত্তরটি কী কী করবে @IBDesignableএবং তার ব্যাখ্যার লিংক সহ আরও সহায়ক @IBInspectableহবে, অর্থাত্ এই পোস্টটি এনশিপস্টারে
রাসেল অস্টিন

1
যদি আপনি কোনও আনুষঙ্গিক ভিউগুলিতে নির্ভর করে থাকেন (যেমন ইউআইটিেক্সটফিল্ডে পরিষ্কার বোতাম কার্যকারিতা) তবে return super.textRectForBounds(CGRectInset(bounds, inset, inset))আনুষঙ্গিক দর্শনগুলি থেকে অফসেটটি সঠিকভাবে পরিচালনা করবে।
মাইক ফাই

@ কায়সাবেনি আপনাকে আপনার পাঠ্যক্ষেত্রে ক্লিক করতে হবে এবং ক্লাসটি ফর্মটেক্সটফিল্ডে পরিবর্তন করতে হবে
গুস্তাভো বারবোসা

77

সম্পাদনা করুন: এখনও আইওএস 11.3.1 এ কাজ করে

আইওএস 6 myTextField.leftView = paddingView;এ সমস্যা সৃষ্টি করছে

এটি সমস্যার সমাধান করে

myTextField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0)

ডান সারিবদ্ধ পাঠ্য ক্ষেত্রের জন্য মন্তব্যে latenitecoderCATransform3DMakeTranslation(-5, 0, 0) দ্বারা উল্লেখ হিসাবে ব্যবহার করুন


1
ভাল লাগল, আমাকে অ্যাপের সমস্ত পাঠ্যক্ষেত্রে প্যাডিং রাখতে হয়েছিল, আমি ইউআইটিেক্সটফিল্ডের একটি বিভাগ তৈরি করেছি এবং এই কোডটি ভিতরে রেখেছিলাম - (শূন্য) জাগানো ফ্রেমনিব {{এবং এটি আমার সমস্যার সমাধান করেছে
টিনা নাথ পল

খুবই সোজা! থেক্স :) আমার একটি প্রশ্ন আছে আমি কোডটি বহুবার লেখার পরিবর্তে সমস্ত ইউআইটিেক্সটফিল্ড তৈরি করতে কীভাবে একটি সাধারণ কোড তৈরি করতে পারি?
লুই কালকাতভী

1
অন্যান্য সমস্ত মন্তব্য ধরে নেওয়া হয়েছে যে আপনি বাম দিক থেকে একটি ইউআইটিেক্সটফিল্ড প্যাড করতে চান। সাবক্ল্যাসিং হ'ল ওভারহেডে কিছু ফাঁক আইডি যুক্ত করার জন্য কেবল কিছু ফাঁকা অক্ষর যুক্ত করা যায় তবে এই সমাধানটি হ'ল সমাধান। এক লাইনের ভবিষ্যতের প্রমাণ। আপনি যদি এমন একটি পাঠ্যক্ষেত্রের সাথে কাজ করছেন যা পাঠ্যটি ডানদিকে প্রান্তিককরণের জন্য বিয়োগের মানটি ব্যবহার করুন (-5,0,0) ধন্যবাদ ইন্দার
ল্যাটেনিটেকোডার

1
4 বছর পরে আমি আমার নিজের উত্তরটি পেয়েছি: ডি, @ লেটেনাইটেকোডার আপনার মন্তব্যটি যা প্রয়োজন তা ছিল। উত্তর আপডেট করা হচ্ছে
ইন্দ্র কুমার রাঠোর

1
আমি ডান এবং বাম উভয় প্যাডিং চাইলে আমি কি করতে পারি ??
মিনা হান্না

70

ইউআইটিেক্সটফিল্ডে প্যাডিং যুক্ত করার জন্য একটি ভাল পদ্ধতির নাম সাবক্লাস এবং একটি এজ-ইনসেটস সম্পত্তি যুক্ত করা। তারপরে আপনি প্রান্ত সেট করুন এবং ইউআইটিেক্সটফিল্ড সেই অনুযায়ী আঁকা হবে। এটি একটি কাস্টম বামদর্শন বা ডানদর্শন দৃশ্যের সাথে সঠিকভাবে কাজ করবে।

OSTextField.h

#import <UIKit/UIKit.h>

@interface OSTextField : UITextField

@property (nonatomic, assign) UIEdgeInsets edgeInsets;

@end

OSTextField.m

#import "OSTextField.h"

@implementation OSTextField

- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.edgeInsets = UIEdgeInsetsZero;
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if(self){
        self.edgeInsets = UIEdgeInsetsZero;
    }
    return self;
}

- (CGRect)textRectForBounds:(CGRect)bounds {
    return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [super editingRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}

@end

এটি উত্তর গ্রহণ করা উচিত। এটি ডান এবং বাম দৃষ্টিভঙ্গিগুলির জন্যও কাজ করে ..
এনএসপ্র্যাটিক

25

স্রেফ সাবক্লাস ইউআইটিেক্সটফিল্ড এটি:

@implementation DFTextField


- (CGRect)textRectForBounds:(CGRect)bounds
{
    return CGRectInset(bounds, 10.0f, 0);
}

- (CGRect)editingRectForBounds:(CGRect)bounds
{
    return [self textRectForBounds:bounds];
}


@end

এটি উভয় পাশের 10 পয়েন্টের অনুভূমিক প্যাডিং যুক্ত করে।


21

উদ্দেশ্য সি কোড

MyTextField.h

#import <UIKit/UIKit.h>

@interface MyTextField : UITextField

@property (nonatomic) IBInspectable CGFloat padding;

@end

MyTextField.m

#import "MyTextField.h"

IB_DESIGNABLE
@implementation MyTextField

@synthesize padding;

-(CGRect)textRectForBounds:(CGRect)bounds{
    return CGRectInset(bounds, padding, padding);
}

-(CGRect)editingRectForBounds:(CGRect)bounds{
    return [self textRectForBounds:bounds];
}

@end

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



20
  1. একটি পাঠ্যক্ষেত্র কাস্টম তৈরি করুন

PaddingTextField.swift

import UIKit
class PaddingTextField: UITextField {

@IBInspectable var paddingLeft: CGFloat = 0
@IBInspectable var paddingRight: CGFloat = 0

override func textRectForBounds(bounds: CGRect) -> CGRect {
    return CGRectMake(bounds.origin.x + paddingLeft, bounds.origin.y,
        bounds.size.width - paddingLeft - paddingRight, bounds.size.height);
}

override func editingRectForBounds(bounds: CGRect) -> CGRect {
    return textRectForBounds(bounds)
}}
  1. আপনার পাঠ্যক্ষেত্র শ্রেণিটি প্যাডিংটেক্সটফিল্ড সেট করুন এবং আপনার প্যাডিংগুলি পছন্দমতো পছন্দ করুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

  2. উপভোগ কর

চূড়ান্ত


19

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

শিরোনাম ফাইল:

@interface UITextField (PaddingText)

-(void) setLeftPadding:(int) paddingValue;

-(void) setRightPadding:(int) paddingValue;
@end

বাস্তবায়ন ফাইল:

#import "UITextField+PaddingText.h"

@implementation UITextField (PaddingText)

-(void) setLeftPadding:(int) paddingValue
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, paddingValue, self.frame.size.height)];
    self.leftView = paddingView;
    self.leftViewMode = UITextFieldViewModeAlways;
}

-(void) setRightPadding:(int) paddingValue
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, paddingValue, self.frame.size.height)];
    self.rightView = paddingView;
    self.rightViewMode = UITextFieldViewModeAlways;
}

@end

ব্যবহারের উদাহরণ

#import "UITextField+PaddingText.h"

[self.YourTextField setLeftPadding:20.0f];

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

চিয়ার্স


14

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

extension UITextField {
    @IBInspectable var padding_left: CGFloat {
        get {
            LF.log("WARNING no getter for UITextField.padding_left")
            return 0
        }
        set (f) {
            layer.sublayerTransform = CATransform3DMakeTranslation(f, 0, 0)
        }
    }
}

যাতে আপনি আইবিতে মান নির্ধারণ করতে পারেন

ইন্টারফেস বিল্ডারে প্রতিনিধিত্ব করা আইবিআই স্পেসটেবল সেটিং


IBInspectableরানটাইমের সময় আপনাকে সেটার কোডটি প্রয়োগ করতে দেয়, সুতরাং কেবল নিজের নম্বরটি প্রবেশ করান Interface Builderএবং এটি কার্যকর হবে।
superarts.org

আপনি যখন এটি কাজ করবে না Clear Button। এই সমাধানটি প্রয়োগ করা হলে আপনার পরিষ্কার বোতামটি দৃশ্যমান হবে না।
ভাভিন_ম

11

আপনি প্যাডিং সেট করতে পারবেন না। পরিবর্তে UIViewএটির সাথে আপনার ব্যাকগ্রাউন্ড চিত্র এবং এর UITextFieldঅভ্যন্তর রয়েছে। সেট UITextFieldহিসাবে প্রস্থ UIViewWidth-(paddingSize x 2)এবং উচ্চতা একভাবে এবং তারপর সময়ে এটি সেট paddingSize,paddingSize


9

এর মতো কেবল সাবক্লাস ইউআইটিেক্সটফিল্ড ( সুইফ্ট সংস্করণ ):

import UIKit

class CustomTextField: UITextField {

    override func textRectForBounds(bounds: CGRect) -> CGRect {
       return CGRectInset(bounds, 25.0, 0)
    }

    override func editingRectForBounds(bounds: CGRect) -> CGRect {
       return self.textRectForBounds(bounds)
    }

}

এটি উভয় পাশের 25.0 পয়েন্টের অনুভূমিক প্যাডিং যুক্ত করে ।


8

আমি নেটের সমাধানটি বন্ধ করে দিয়েছিলাম তবে তখন আমি দেখতে পেলাম যে আপনি যখন বাম ভিউ / রাইটভিউ বৈশিষ্ট্যগুলি ব্যবহার করেন তখন এটি সমস্যার সৃষ্টি করে, তাই সুপারের বাস্তবায়নের জন্য এটির আরও ভাল সুর করুন, কারণ এটি বাম / ডানদিকের দৃষ্টিভঙ্গিকে বিবেচনায় নেবে।

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

- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [self textRectForBounds:bounds];
}

6

সুইফট 3 এর জন্য আপডেট হওয়া সংস্করণ:

@IBDesignable
class FormTextField: UITextField {

    @IBInspectable var paddingLeft: CGFloat = 0
    @IBInspectable var paddingRight: CGFloat = 0

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return CGRect(x: bounds.origin.x + paddingLeft, y: bounds.origin.y, width: bounds.size.width - paddingLeft - paddingRight, height: bounds.size.height)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return textRect(forBounds: bounds)
    }
}

6

ইউআইটিেক্সটফর্ডার স্টাইলনোন: সুইফট সহ ইউআইটিেক্সটফিল্ডের জন্য প্যাডিং সেট করুন

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

- (void) modifyTextField:(UITextField *)textField
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
    textField.leftView = paddingView;
    textField.leftViewMode = UITextFieldViewModeAlways;
    textField.rightView = paddingView;
    textField.rightViewMode = UITextFieldViewModeAlways;

    [textField setBackgroundColor:[UIColor whiteColor]];
    [textField setTextColor:[UIColor blackColor]];
}

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

[self modifyTextField:self.firstNameTxtFld];

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

হ্যাক "এভিল ট্রাউট" এর জন্য ধন্যবাদ! (নম)

আমি ভেবেছিলাম সুইফট সহ আমার এই উত্তরটির কোড স্নিপেট আপডেট করা উচিত:

যেহেতু সুইফ্ট আমাদের বিদ্যমান ক্লাসগুলির জন্য এক্সটেনশান লেখার অনুমতি দেয়, আসুন এটি সেভাবেই লিখুন।

extension UITextField {
    func addPaddingToTextField() {
        let paddingView: UIView = UIView.init(frame: CGRectMake(0, 0, 8, 20))
        self.leftView = paddingView;
        self.leftViewMode = .Always;
        self.rightView = paddingView;
        self.rightViewMode = .Always;


        self.backgroundColor = UIColor.whiteColor()
        self.textColor = UIColor.blackColor()
    }
}

ব্যবহার:

self.firstNameTxtFld.addPaddingToTextField()

আশা করি এটি অন্য কারও জন্য সহায়ক হবে!
চিয়ার্স!


5

সুইফটে এটি কীভাবে অর্জন করা যায় তা এখানে

@IBOutlet weak var yourTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
let paddingView = UIView(frame: CGRectMake(0, 0, 10, self.yourTextField.frame.height))
yourTextField.leftView = paddingView
yourTextField.leftViewMode = UITextFieldViewMode.Always
}
}

সংস্থান


5

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

let paddingView: UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
textField.leftView = paddingView
textField.leftViewMode = UITextFieldViewMode.Always;

4

program এই পরামর্শগুলি তাদের জন্য দুর্দান্ত যারা প্রোগ্রামিয়ালি ইন্টারফেস তৈরি করছেন।

তবে আমাদের মধ্যে যারা এক্সকোড ইন্টারফেস বিল্ডার ব্যবহার করেন তাদের জন্য দুটি আলস্য সহজ উপায় রয়েছে:

  • সহজ: একটি পাঠ্য ক্ষেত্রের পিছনে একটি ইউআইআইমেজভিউ রাখুন

  • সবচেয়ে সহজ: আপনার উপরের সীমানা শৈলীটি সাধারণ কালো স্কোয়ারে পরিবর্তন করুন (বাম বিকল্প থেকে দ্বিতীয়), তারপরে আপনার চিত্রটিকে ব্যাকগ্রাউন্ড চিত্র হিসাবে যুক্ত করুন। চিত্রটি বর্গক্ষেত্রের চেয়ে বেশি প্রাধান্য পায়, সুতরাং আপনি বর্গটি আসলে এঁকে না দিয়ে সাধারণ চিত্রের পটভূমির জন্য প্রয়োজনীয় প্যাডিংটি পান।

সম্পাদনা: আপনি কালো গোলকটিও ব্যবহার করতে পারেন (আইবিতে ইউআইটিেক্সটবক্স নির্বাচন করার সময় বাম বিকল্প থেকে তৃতীয়), এটি ডানদিকের "গ্রাফিকাল গোলক" শৈলীর সাথে কাজ করে না।


আপনার সহজ সমাধানটি কিছু ক্ষেত্রে সত্যই একটি বৈধ পছন্দ, তবে আপনার সহজ সমাধান হ্যাক which
jmdecombe

আমি আপনার সাথে একমত নই - আমি কেন সমস্ত ক্যাপস অক্ষরে "অলস সহজ উপায়" রেখেছি ts আজ অবধি আমার জন্য এটি দুর্দান্ত কাজ করেছে।
উডি 1212

4

যদি কেউ Swift 4.0সংস্করণ খুঁজছেন তবে নীচে extensionকাজ করা হচ্ছে। এটি উভয় Leftএবং Rightজন্য প্যাডিং আছে UITextField। আসলে এটাIBInspectable স্টোরিবোর্ড কনফিগারেশনের জন্য। আপনি ইন্টারফেস নির্মাতা / স্টোরিবোর্ড থেকে সরাসরি মানটি সেট করতে পারেন। এটি সুইফট ৪.০ সংস্করণ এবং এক্সকোড ৯.০-এ পরীক্ষিত কোড

মনে রাখবেন যে আপনি যদি Clear Buttonএটি সক্ষম করতে চান UITextFieldতবে আপনার ডান প্যাডিং ফাঁকা রাখতে হবে।

import UIKit

extension UITextField {

    @IBInspectable var paddingLeft: CGFloat {
        get {
            return leftView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            leftView = paddingView
            leftViewMode = .always
        }
    }

    @IBInspectable var paddingRight: CGFloat {
        get {
            return rightView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            rightView = paddingView
            rightViewMode = .always     
        }
    }
}  

3

এটি করার সর্বোত্তম উপায় হ'ল ইউআইটিেক্সটফিল্ড এবং .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;

 }

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

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


3

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

class CustomTextField:UITextField{

    required init?(coder aDecoder: NSCoder){
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return CGRect.init(x: bounds.origin.x + 8, y: bounds.origin.y, width: bounds.width, height: bounds.height)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return self.textRect(forBounds:bounds)
    }
}

2

নেট ফ্লিঙ্কের উত্তরটি আমার প্রিয়, তবে ডান / বাম দৃষ্টিভঙ্গিগুলি ভুলে যাবেন না। UITextFieldউপশ্রেণীর জন্য যেমন :

override func rightViewRectForBounds(bounds: CGRect) -> CGRect {
    let rightViewBounds = super.rightViewRectForBounds(bounds)

    return CGRectMake(CGRectGetMinX(rightViewBounds) - 10, CGRectGetMinY(rightViewBounds), CGRectGetWidth(rightViewBounds), CGRectGetHeight(rightViewBounds))
}

উপরের কোড এর জন্য ডান প্যাডিং সেট rightViewএর UITextField


2

সুইফট 3 সমাধান

class CustomTextField: UITextField {

 override func textRect(forBounds bounds: CGRect) -> CGRect {
  return CGRect(x: bounds.origin.x + 10, y: bounds.origin.y + 8, width: bounds.size.width - 20, height: bounds.size.height - 16)
 }

 override func editingRect(forBounds bounds: CGRect) -> CGRect {
  return self.textRect(forBounds: bounds)
 }
}

2

ইউআইটিেক্সটফিল্ডে প্যাডিং দেওয়ার জন্য এখানে একটি সুইফট কোড

 func txtPaddingVw(txt:UITextField) {
     let paddingView = UIView(frame: CGRectMake(0, 0, 10, 10))
     txt.leftViewMode = .Always
     txt.leftView = paddingView
 }

এবং কল করে কল করুন

self.txtPaddingVw(txtPin)

2

আপনি বিভাগ ব্যবহার করতে পারেন। বাম এবং ডান প্যাডিং সেট করুন

UITextField + + Padding.h

@interface UITextField (Padding)
@property (nonatomic, assign) CGFloat paddingValue;
@property (nonatomic, assign) CGFloat leftPadding;
@property (nonatomic, assign) CGFloat rightPadding;

//overwrite
-(CGRect)textRectForBounds:(CGRect)bounds;
-(CGRect)editingRectForBounds:(CGRect)bounds;
@end

UITextField + + Padding.m

#import "UITextField+Padding.h"
#import <objc/runtime.h>

static char TAG_LeftPaddingKey;
static char TAG_RightPaddingKey;
static char TAG_Left_RightPaddingKey;

@implementation UITextField (Padding)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-(CGRect)textRectForBounds:(CGRect)bounds {

CGFloat offset_Left=0;
CGFloat offset_Right=0;
if (self.paddingValue>0) {
    offset_Left=self.paddingValue;
    offset_Right=offset_Left;
}else{
    if (self.leftPadding>0){
        offset_Left=self.leftPadding;
    }
    if (self.rightPadding>0){
        offset_Right=self.rightPadding;
    }
}

if (offset_Left>0||offset_Right>0) {
    return CGRectMake(bounds.origin.x+ offset_Left ,bounds.origin.y ,
                      bounds.size.width- (offset_Left+offset_Right), bounds.size.height-2 );
 }else{
    return bounds;
 }
}



-(CGRect)editingRectForBounds:(CGRect)bounds {
    return [self textRectForBounds:bounds];
}
#pragma clang diagnostic pop


#pragma maek -setter&&getter
- (CGFloat)paddingValue
{
    return [objc_getAssociatedObject(self,&TAG_Left_RightPaddingKey) floatValue];
}
-(void)setPaddingValue:(CGFloat)paddingValue
{
    objc_setAssociatedObject(self, &TAG_Left_RightPaddingKey, @(paddingValue), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(CGFloat)leftPadding
{
    return [objc_getAssociatedObject(self,&TAG_LeftPaddingKey) floatValue];
}

-(void)setLeftPadding:(CGFloat)leftPadding
{
    objc_setAssociatedObject(self, &TAG_LeftPaddingKey, @(leftPadding), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(CGFloat)rightPadding
{
    return [objc_getAssociatedObject(self,&TAG_RightPaddingKey) floatValue];
}

-(void)setRightPadding:(CGFloat)rightPadding
{
    objc_setAssociatedObject(self, &TAG_RightPaddingKey, @(rightPadding), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end

আপনি এই সেলফোনফোনমামটিএফ.প্যাডিংভ্যালু = 10.f এর মতো প্যাডিং সেট করতে পারেন ; অথবা স্ব.ফোননিমটিএফ.ফেলপ্যাডিং = 10.f;


1

@ এভিল ট্রাউটের উত্তর দুর্দান্ত। আমি বেশ কিছুদিন ধরে এই পদ্ধতির ব্যবহার করছি। "অজস্র পাঠ্যক্ষেত্রের সাথে কাজ করা" এর একমাত্র জিনিসটির অভাব রয়েছে। আমি অন্যান্য পদ্ধতির চেষ্টা করেছি কিন্তু মনে হচ্ছে এটি কার্যকর হয় না।

কেবল একটি প্যাডিং যুক্ত করতে ইউআইটিএক্সেক্সট ফিল্ড সাবক্লাসিং করা আমার কোনও অর্থ বোধ করে না। সুতরাং, আমি প্যাডিং যুক্ত করতে সমস্ত ইউআইটিেক্সটফিল্ডগুলিতে পুনরাবৃত্তি করেছি।

-(void) addPaddingToAllTextFields:(UIView*)view {

    for(id currentView in [view subviews]){
        if([currentView isKindOfClass:[UITextField class]]) {
            // Change value of CGRectMake to fit ur need
            [currentView setLeftView:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 20)]];
            [currentView setLeftViewMode:UITextFieldViewModeAlways];
        }

        if([currentView respondsToSelector:@selector(subviews)]){
            [textfieldarray addObjectsFromArray:[self addPaddingToAllTextFields:currentView]];
        }
    }
}

পদ্ধতিটি [সেল্ফ অ্যাডপ্যাডিংটোওআলটেক্সটফিল্ডস: [স্ব দর্শন]] দ্বারা কল করা যেতে পারে;
কিশোর কুন্দন

যেহেতু textfieldarrayদ্বিতীয় ifব্লকে সংজ্ঞায়িত করা হয়নি, তাই দ্বিতীয়টির বিষয়বস্তু প্রতিস্থাপনের পরে আমি এই স্নিপেটটি (ধন্যবাদ!) সাফল্যের ifসাথে ব্যবহার করেছিfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
অ্যাডামআপ

1

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


1

আমি এখনও অবধি সবচেয়ে ভাল সমাধানটি খুঁজে পেয়েছি একটি বিভাগ। এভাবে আমি বাম এবং ডানে 5 পয়েন্টের প্যাডিং যুক্ত করব:

@implementation UITextField (Padding)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (CGRect)textRectForBounds:(CGRect)bounds {
    return CGRectMake(bounds.origin.x + 5, bounds.origin.y,
                      bounds.size.width - 10, bounds.size.height);
}
- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [self textRectForBounds:bounds];
}
#pragma clang diagnostic pop

@end

# প্রাগমা কেবল বিরক্তিকর সতর্কতাগুলি সরিয়ে দেওয়ার জন্য


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

1
এটি কি একটি সাধারণ বামার বিভাগ যা অ্যাপ্লিকেশনটিতে সমস্ত পাঠ্য ক্ষেত্রের জন্য প্যাডিং প্রয়োগ করবে?
বেন সিনক্লেয়ার

@Andy এটি প্রযোজ্য যখন আপনি এটি আমদানি করতে, আপনি যদি একটি বর্গ UITextField + + প্যাডিং তৈরি এবং viewcontroller বা বর্গ আপনি প্যাডিং সহ একটি পাঠ্য ক্ষেত্র আছে ইম্পোর্ট করতে হবে
Mongi Zaidi

@ মঙ্গিজাইদি: আপনি ভুল বলেছেন। এটি এক্সিকিউটেবলের সাথে সংযুক্ত হয়ে যায়, আমদানি করা অপ্রাসঙ্গিক কিনা।
জসোল্ট জাজমারি

1
textField.layer.borderWidth = 3;

সীমানা যুক্ত করবে, যা আমার জন্য প্যাডিং হিসাবে কাজ করেছিল।


0

আরেকটি বিবেচনাটি হ'ল, আপনি UITextFieldযেখানে প্যাডিং যুক্ত করছেন সেখানে যদি আপনার একাধিক থাকে তবে UIViewপ্রতিটি পাঠ্যক্ষেত্রের জন্য আলাদা তৈরি করা উচিত - কারণ সেগুলি ভাগ করা যায় না।

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