IOS7 पर UITextfield leftView / rightView पैडिंग


93

IOS7 पर एक UITextField के बाएँ दृश्य और दाएँ दृश्य वास्तव में टेक्स्टफ़ील्ड बॉर्डर के करीब हैं।

मैं उन मदों में कुछ (क्षैतिज) पैडिंग कैसे जोड़ सकता हूं?

मैंने फ्रेम को संशोधित करने की कोशिश की, लेकिन काम नहीं किया

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

कृपया ध्यान दें, मैं टेक्स्टफील्ड के टेक्स्ट में पैडिंग जोड़ने में दिलचस्पी नहीं रखता, जैसे कि UITextBieldStyleNone के साथ UITextField के लिए यह सेट पैडिंग



1
नहीं, यह पाठ फ़ील्ड में बाएं दृश्य के रूप में प्रदर्शित छवि को इंडेंट करने के बारे में पूछ रहा है। पाठ को इंडेंट नहीं कर रहा है। उसका कोड आज़माएं और आप उस दृश्य को बाईं ओर सेट करते हुए एक छवि स्थानों पर देखेंगे, जो टेक्स्ट फ़ील्ड के बाएँ किनारे पर छवि बनाता है, जिसमें कोई गद्दी नहीं है। यह बदसूरत लगता है।
पत्थर

जवाबों:


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. इंटरफ़ेस बिल्डर में, उस टेक्स्टफिल्ड पर क्लिक करें जिसे आप उप-वर्ग में बदलना चाहते हैं और इस नए उप-वर्ग के नाम के वर्ग गुण को बदलें


इसके लिए IBDesignable का उपयोग कैसे करें?
रिद्धी

आप 2020 के दौरे में इसे देख रहे हैं नवीनतम संस्करण के लिए या यदि: stackoverflow.com/a/55041786/6596443
AKINNUBI ABIOLA SYLVESTER

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

1
आप ScaleAspectFit का उपयोग केंद्र के बजाय भी कर सकते हैं ... यदि छवि का आकार सटीक फ्रेम के साथ मेल नहीं खा रहा है।
मिहिर मेहता

मैंने UIButton (UIImageView के बजाय) के लिए आपके उदाहरण का उपयोग किया, जबकि इसका प्रकार InfoLight है।
ओधाम

मैंने पाया कि ".center" के बजाय ".right" यह बिल्ट-इन सर्च बार की तरह दिखता है जैसे कि कॉन्टेक्ट ऐप में एक। इस पर महान समाधान, इसे पोस्ट करने के लिए धन्यवाद।
जेम्स टॉमी

या यदि आपको डिजाइन मनोरंजन में सटीक होने की आवश्यकता है, तो छवि को .left में डालें और फिर सटीक पैडिंग प्राप्त करने के लिए चौड़ाई बढ़ाएँ
jovanjovanovic

4
यह अब iOS 13 और Xcode 11 Beta 7 के साथ काम नहीं करता है। हालांकि iOS 11/12 पर यह ठीक काम करता है।
पैट्रिकडॉटस्टार

49

सबसे आसान तरीका बाएं दृश्य / righView के लिए एक UIView जोड़ रहा है और UIView में एक ImageView जोड़ रहा है, UIView के अंदर ImageView की उत्पत्ति को कहीं भी समायोजित करें, यह मेरे लिए एक आकर्षण की तरह काम करता है। इसमें कोड की केवल कुछ पंक्तियों की आवश्यकता होती है

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

उम्मीद तर्क प्रकार 'UIImage के प्रकार' स्ट्रिंग 'का मान परिवर्तित नहीं कर सकते? "

7

यह मेरे लिए काम करता है

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 यदि आप क्वार्ट्जकोर सहित एक लाइन पर विचार करते हैं :)


1
यह सीमा को भी स्थानांतरित करता है
सॉफ्टलिओन

1
लेकिन समस्या को हल करने के लिए केवल बाएं गद्दी की समस्या को हल नहीं करता है
carmen_munich

1
मेरे पास rightView.layer.sublayerTransform = CATransform3DMakeTranslation (-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 पर जाएं और पहचान निरीक्षक पर क्लिक करें और अपने स्वयं के "CustomTextField" वर्ग विकल्प के साथ UITextfield को बदलें।

नोट: यदि आप टेक्स्टफील्ड के लिए बस ऑटो लेआउट के साथ पेडिंग देते हैं तो आपका एप्लिकेशन नहीं चलेगा और केवल खाली स्क्रीन दिखाएगा।


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
यह सिर्फ पाठ में पैडिंग जोड़ता है, जो कि पूछने वाले की तलाश में नहीं है। वह एक स्पष्ट बाएं दृश्य नहीं चाहता है। वह बाएं दृश्य के रूप में प्रदर्शित छवि चाहता है।
पत्थर

आप बस paddingView में छवि जोड़ सकते हैं।
मैथ्यूज वेबर

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

एक कस्टम UITextField क्लास बनाएँ और UITextField के बजाय उस क्लास का उपयोग करें। ओवरराइड - (CGRect) textRectForBounds: (CGRect) सीमा को उस राउंड को सेट करने के लिए जिसे आपको ज़रूरत है

उदाहरण

- (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

अपने जवाब के लिए आप लोगों को धन्यवाद, मेरे आश्चर्य के लिए, उनमें से कोई भी वास्तव में मेरे टेक्स्टफ़ील्ड को सही दृश्य छवि फिट नहीं करता था, जबकि अभी भी आवश्यक पैडिंग प्रदान करता है। तो मैं पहलू मोड का उपयोग करने के बारे में सोचा और चमत्कार हुआ। भविष्य के चाहने वालों के लिए, यहाँ मैंने क्या प्रयोग किया है:

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

यदि आप एक UIImageView का उपयोग बाएं दृश्य के रूप में कर रहे हैं तो आपको इस कोड का उपयोग करना होगा:

सावधानी: अंदर देखने के लिए उपयोग न करें

-(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

मैंने अपने ViewController क्लास में एक कस्टम विधि बनाई, जैसे दिखाया गया bellow:

- (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];

यह पूरी तरह से iOS 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

चूंकि iOS 13 और Xcode 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

// सेट करें UITextField का अधिकार, स्विफ्ट 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

एक चाल: UIImageView वाले UIView को UITextField में rightView के रूप में जोड़ें। यह UIView आकार में बड़ा होना चाहिए, अब इसके ऊपर UIImageView रखें। तो सही से जगह की एक गद्दी होगी।

// 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

Swift2 के लिए, मैं उपयोग करता हूं

...
        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

मुझे यह एक पुरानी पोस्ट का एहसास है और यह उत्तर मेरे उपयोग के मामले के लिए थोड़ा विशिष्ट है, लेकिन मैंने इसे पोस्ट किया है कि अन्य लोग इसी तरह के समाधान की मांग कर रहे हैं। मैं एक UITextField के बाएँ दृश्य या दाएँ दृश्य को स्थानांतरित करना चाहता हूं, लेकिन मैं उनमें छवियां नहीं डाल रहा हूं और कोई हार्ड कोडित स्थिरांक नहीं चाहता हूं।

मेरा UI पाठ क्षेत्र के स्पष्ट बटन को छिपाने और UIActivityIndicatorView को प्रदर्शित करने के लिए कहता है जहां स्पष्ट बटन स्थित था।

मैं एक स्पिनर जोड़ता हूं rightView, लेकिन बॉक्स से बाहर (iOS 13 पर) इसे दाईं ओर 20 पिक्सेल स्थानांतरित कर दिया गया है clearButton। मैं मैजिक नंबरों का उपयोग करना पसंद नहीं करता क्योंकि क्लियरबटन की स्थिति और राइट व्यू ऐप्पल द्वारा किसी भी समय बदलने के अधीन हैं। UI डिज़ाइन का आशय "स्पिनर है जहाँ स्पष्ट बटन है", इसलिए मेरा समाधान UITextField को उप-वर्ग करना और ओवरराइड करना था 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()
    }

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

}

//------------------------------------------------------------------------------
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.