সুইফটে একটি ইউআইটিেক্সটফিল্ডের সর্বাধিক অক্ষরের দৈর্ঘ্য সেট করুন


88

আমি জানি এটিতে অন্যান্য বিষয় রয়েছে তবে কীভাবে এটি প্রয়োগ করা যায় তা আমি খুঁজে পেতে পারি না।

আমি একটি ইউআইটিেক্সটফিল্ডকে কেবল 5 টি অক্ষরে সীমাবদ্ধ করার চেষ্টা করছি

সাধারণত আলফানিউমেরিক এবং - এবং। এবং _

আমি এই কোডটি দেখেছি

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
                       replacementString string: String) -> Bool
{
    let maxLength = 4
    let currentString: NSString = textField.text
    let newString: NSString =
             currentString.stringByReplacingCharactersInRange(range, withString: string)
    return newString.length <= maxLength
}

এবং

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    let length = count(textField.text.utf16) + count(string.utf16) - range.length
    return length <= 10 
}

আমি ঠিক জানি না কীভাবে এটি বাস্তবায়ন করতে হয় বা কোন "টেক্সটফিল্ড" আমার কাস্টমটি ইউআইটিেক্সটফিল্ডের জন্য বদলাতে হবে


সুইফট 4 বাস্তবায়ন stackoverflow.com/a/46513151/2303865
লিও Dabus

দ্রুত সতর্কতা - এতে কমান একটি Stringএই দিন সুইফট মধ্যে আপনি যা করতে পারেন পরিশেষে শুধু .prefix (ঢ)
Fattie

উত্তর:


136
  1. আপনার ভিউ কন্ট্রোলারের UITextFieldDelegateনীচের মতো মেনে চলতে হবে :

    class MyViewController: UIViewController, UITextFieldDelegate {
    
    }
    
  2. আপনার পাঠ্যক্ষেত্রের প্রতিনিধি সেট করুন: myTextField.delegate = self

  3. আপনার ভিউ কন্ট্রোলারে পদ্ধতিটি প্রয়োগ করুন: textField(_:shouldChangeCharactersInRange:replacementString:)

সব একসাথে:

class MyViewController: UIViewController,UITextFieldDelegate  //set delegate to class 

@IBOutlet var mytextField: UITextField             //  textfield variable 

override func viewDidLoad() {
    super.viewDidLoad()
    mytextField.delegate = self                  //set delegate
}


func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
                       replacementString string: String) -> Bool
{
    let maxLength = 4
    let currentString: NSString = textField.text
    let newString: NSString =
             currentString.stringByReplacingCharactersInRange(range, withString: string)
    return newString.length <= maxLength
}

সুইফট 4 এর জন্য

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let maxLength = 1
    let currentString: NSString = (textField.text ?? "") as NSString
    let newString: NSString =
        currentString.replacingCharacters(in: range, with: string) as NSString
    return newString.length <= maxLength
}

প্রদত্ত পাঠ্য ক্ষেত্রে প্রবেশের জন্য কেবলমাত্র বর্ণের একটি নির্দিষ্ট সেটকে অনুমতি দেওয়া হচ্ছে

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
  var result = true
  
  if mytextField == numberField {
    if count(string) > 0 {
      let disallowedCharacterSet = NSCharacterSet(charactersInString: "0123456789.-").invertedSet
      let replacementStringIsLegal = string.rangeOfCharacterFromSet(disallowedCharacterSet) == nil
      result = replacementStringIsLegal
    }
  }
 
  return result
}

কোনও আইওএস পাঠ্য ক্ষেত্রটি কীভাবে প্রোগ্রাম করবেন যা সর্বাধিক দৈর্ঘ্যের সাথে শুধুমাত্র সংখ্যাসূচক ইনপুট নেয়


প্রম্পট জবাবের জন্য আপনাকে অনেক ধন্যবাদ! আমি যদি এই একটি পাঠ্যক্ষেত্রকে প্রতিনিধি হিসাবে সেট করি তবে আমি কি অন্য পাঠ্যক্ষেত্রগুলি পরিবর্তন করতে সক্ষম হব?
ishkur88

হ্যাঁ, এবং আপনি textFieldপদ্ধতিতে প্রথম প্যারামিটার হিসাবে প্রশ্নে (সম্পাদিত হচ্ছে) পাঠ্যক্ষেত্রটি পাবেনfunc textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
আলাদিন

তবে আমি দ্বিতীয় প্যারামিটারটি কোথায় রাখব? প্রতিনিধি হিসাবে সেট করার পরে আমি আমার টেক্সটফিল্ডটিকে আবার উল্লেখ করি না।
ইশকুর 88

আমি যদি কেবল ফোন নম্বরগুলির জন্য অন্য পাঠ্যক্ষেত্র 0-9 তৈরি করতে চাইতাম Like
ইশকুর 88

প্রতিবার যখন কোনও পাঠ্যক্ষেত্র সম্পাদনা করা হচ্ছে, কলব্যাক কল shouldChangeCharactersInRangeকরা হবে , এটি সমস্ত পাঠ্যক্ষেত্রের জন্য, আপনি একই জায়গায় কলব্যাক পাবেন shouldChangeCharactersInRangeএবং এই পদ্ধতির অভ্যন্তরে আপনি জানতে পারবেন কোন পাঠ্যক্ষেত্রটি সম্পাদিত হচ্ছে পাশ করা প্যারামিটারের জন্য ধন্যবাদ আপনি textFieldউদাহরণস্বরূপ দিতে পারেন প্রতিটি পাঠ্যক্ষেত্রের জন্য ট্যাগ এবং প্রতিটি পাঠ্যক্ষেত্রের ভিতরে এবং পরীক্ষার shouldChangeCharactersInRangeজন্য সামগ্রীর বৈধতা সম্পাদন করে
আলাদিন

118

আধুনিক সুইফট

দ্রষ্টব্য যে এই সমস্যা সম্পর্কিত অনলাইন কোড কোডের বেশিরভাগটি অত্যন্ত পুরানো

আপনার প্রকল্পের যে কোনও সুইফট ফাইলে নিম্নলিখিতটি আটকান। (আপনি ফাইলের কোনও নাম রাখতে পারেন, উদাহরণস্বরূপ, "Handy.swift"।)

এটি অবশেষে আইওএসের একটি নির্বোধ সমস্যার সমাধান করে:

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

আপনার পাঠ্য ক্ষেত্রে এখন একটি .maxLength

বিকাশের সময় স্টোরিবোর্ডে সেই মানটি সেট করা বা অ্যাপটি চলাকালীন কোডে সেট করা সম্পূর্ণ ঠিক আছে completely

// simply have this in any Swift file, say, Handy.swift

import UIKit
private var __maxLengths = [UITextField: Int]()
extension UITextField {
    @IBInspectable var maxLength: Int {
        get {
            guard let l = __maxLengths[self] else {
               return 150 // (global default-limit. or just, Int.max)
            }
            return l
        }
        set {
            __maxLengths[self] = newValue
            addTarget(self, action: #selector(fix), for: .editingChanged)
        }
    }
    func fix(textField: UITextField) {
        let t = textField.text
        textField.text = t?.prefix(maxLength)
    }
}

এটা খুব সহজ।


পাদটীকা - এই দিনগুলি সুরক্ষিতভাবে Stringদ্রুত কাটাতে, আপনি কেবল.prefix(n)


একটি এমনকি সহজ এক-অফ সংস্করণ ...

উপরেরগুলি আপনার প্রকল্পের সমস্ত পাঠ্য ক্ষেত্রগুলি ঠিক করে।

আপনি যদি কেবল একটি নির্দিষ্ট পাঠ্য ক্ষেত্রটি কেবল "4" বলার মধ্যে সীমাবদ্ধ রাখতে চান এবং এটিই ...

class PinCodeEntry: UITextField {
    
    override func didMoveToSuperview() {
        
        super.didMoveToSuperview()
        addTarget(self, action: #selector(fixMe), for: .editingChanged)
    }
    
    @objc private func fixMe() { text = text?.prefix(4) }
}

ভাই! এখানেই শেষ এটা পেতে ওখানে যাও.

(জাস্ট বিটিডব্লিউ , ইউআইটিেক্সট ভিউ সম্পর্কিত https://stackoverflow.com/a/42333832/294884 সম্পর্কিত একটি অনুরূপ খুব দরকারী টিপ এখানে )


ওসিডি প্রোগ্রামারটির জন্য (আমার মতো) ...

@ লিওডাবাস মনে করিয়ে দেওয়ার সাথে সাথে .prefixএকটি স্ট্রিং দেয় । যদি আপনি অবিশ্বাস্যভাবে যত্নশীল হন তবে এটি

let t = textField.text
textField.text = t?.prefix(maxLength)

হবে

if let t: String = textField.text {
    textField.text = String(t.prefix(maxLength))
}

উপভোগ করুন!


4
মনে হচ্ছে বৈধ! ধন্যবাদ.
জে দো

13
এগুলি এত সাধারণ এবং এত সহজ কিছু অর্জন করার জন্য আমার মনকে আঘাত করে যায। তারা কেবল আমাদের বিল্ট ইন একটি সাধারণ পাঠ্যফিল্ড.ম্যাক্স লেন্থ দিতে পারেনি ... যাইহোক আপনার সমাধানটি দুর্দান্ত, ধন্যবাদ!
mylovemhz

4
বাহ, সেরা টিপ আমার কাছে কখনও ছিল। আমি যদি এটি করতে পারি তবে আমি 100 টি ভোট দিয়েছি!
jonathan3087

4
সমাধানটি কার্যকর তবে শীর্ষে পাঠ্যক্ষেত্রের মানচিত্র আসলে একটি ধরে রাখার চক্র তৈরি করবে।
অ্যাঞ্জেল জি। ওলোকুই

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

25

সুইফট 4, সহজভাবে ব্যবহার করুন:

public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return range.location < 10
}

এটি নির্বাচিত উত্তর হওয়া উচিত। সহজ এবং ভাল কাজ করে।
ব্যবহারকারী 832

9
এটা কাজ করে না। আপনি যদি স্ট্রিংয়ের মাঝখানে ট্যাপ করেন এবং আপনি এক্স অক্ষরের চেয়ে বেশি টাইপ করতে পারেন।
স্লাভচো

রেঞ্জ.লোকেশন <10 এর পরিবর্তে আপনি টেক্সটফিল্ড.টেক্সট.লেন্থ <10 ব্যবহার করতে পারেন এই সমাধানটি সহজ এবং মার্জিত।
সাকিব সউদ

আপনি এই সমাধানটি ব্যবহার করতে পারেন: যদি টেক্সটফিল্ড.টেক্সট?। হিসাব> = 12 false মিথ্যা
ফেরান

4
কোনও পাঠ্য অতীত হয়ে গেলে এটি কাজ করে না আপনি অতীতের ক্রিয়ায় কাজ করতে চান আপনার যুক্ত করা উচিতstring.count < MAX_LENGTH
রেজা দেহনাভি

12

স্টিভেন শ্মাটজ একইভাবে করেছিলেন তবে সুইফট ৩.০ ব্যবহার করেছেন:

//max Length
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
               replacementString string: String) -> Bool
{
    let maxLength = 4
    let currentString: NSString = textField.text! as NSString
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
    return newString.length <= maxLength
}

4
ভাল উত্তর. প্রশংসা
হাসিয়া

আপনাকে @ হাস্যা ধন্যবাদ
পাভলস

8

সুইফ্ট 5 এর জন্য:
সর্বাধিক চরের দৈর্ঘ্য সেট করতে একটি লাইন লিখুন:

 self.textField.maxLength = 10

আরও তথ্যের জন্য এখানে ক্লিক করুন

ক্রেডিট: http://www.swiftdevcenter.com/max-character-limit-of-uitextfield-and-allowed-characters-swift/


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

6

আমি মনে করি এর জন্য এক্সটেনশন আরও কার্যকর। এখানে সম্পূর্ণ উত্তর দেখুন

private var maxLengths = [UITextField: Int]()

// 2
extension UITextField {

  // 3
  @IBInspectable var maxLength: Int {
    get {
      // 4
      guard let length = maxLengths[self] else {
        return Int.max
      }
      return length
    }
    set {
      maxLengths[self] = newValue
      // 5
      addTarget(
        self,
        action: #selector(limitLength),
        forControlEvents: UIControlEvents.EditingChanged
      )
    }
  }

  func limitLength(textField: UITextField) {
    // 6
    guard let prospectiveText = textField.text
      where prospectiveText.characters.count > maxLength else {
        return
    }

    let selection = selectedTextRange
    // 7
    text = prospectiveText.substringWithRange(
      Range<String.Index>(prospectiveText.startIndex ..< prospectiveText.startIndex.advancedBy(maxLength))
    )
    selectedTextRange = selection
  }

}

4

উপরে পোস্ট করা অন্যান্য সমাধানগুলি পাঠ্যক্ষেত্রের মানচিত্রের কারণে ধরে রাখার চক্র উত্পাদন করে। তদুপরি, maxLengthকৃত্রিম Int.maxনির্মাণের পরিবর্তে সেট না করা থাকলে সম্পত্তিটি নালাগ্রচিত হওয়া উচিত ; এবং সর্বোচ্চতম দৈর্ঘ্য পরিবর্তন করা হলে লক্ষ্য একাধিক বার সেট করা হবে।

মেমরি ফাঁস এবং অন্যান্য সংশোধনগুলি রোধ করতে দুর্বল মানচিত্র সহ সুইফট 4-এর একটি আপডেট সমাধান

private var maxLengths = NSMapTable<UITextField, NSNumber>(keyOptions: NSPointerFunctions.Options.weakMemory, valueOptions: NSPointerFunctions.Options.strongMemory)

extension UITextField {

    var maxLength: Int? {
        get {
            return maxLengths.object(forKey: self)?.intValue
        }
        set {
            removeTarget(self, action: #selector(limitLength), for: .editingChanged)
            if let newValue = newValue {
                maxLengths.setObject(NSNumber(value: newValue), forKey: self)
                addTarget(self, action: #selector(limitLength), for: .editingChanged)
            } else {
                maxLengths.removeObject(forKey: self)
            }
        }
    }

    @IBInspectable var maxLengthInspectable: Int {
        get {
            return maxLength ?? Int.max
        }
        set {
            maxLength = newValue
        }
    }

    @objc private func limitLength(_ textField: UITextField) {
        guard let maxLength = maxLength, let prospectiveText = textField.text, prospectiveText.count > maxLength else {
            return
        }
        let selection = selectedTextRange
        text = String(prospectiveText[..<prospectiveText.index(from: maxLength)])
        selectedTextRange = selection
    }
}

আপনার উত্তরের জন্য ধন্যবাদ, আপনি দয়া করে সর্বোচ্চ দৈর্ঘ্য ব্যাখ্যা করতে পারেন?
কেহান কামাঙ্গার

4

প্রতিনিধি ব্যবহার না করে সহজ সমাধান:

TEXT_FIELD.addTarget(self, action: #selector(editingChanged(sender:)), for: .editingChanged)


@objc private func editingChanged(sender: UITextField) {

        if let text = sender.text, text.count >= MAX_LENGHT {
            sender.text = String(text.dropLast(text.count - MAX_LENGHT))
            return
        }
}

4
আমি যে উত্তরটি খুঁজছি: ডি
অঙ্কুর লাহির

4
এটি হ'ল সমাধান, সহজ এবং মার্জিত, কোনও বয়লারপ্লেট কোড নেই।
জিশান

3

আমার সুইফট 4 সংস্করণ shouldChangeCharactersIn

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
               replacementString string: String) -> Bool {

        guard let preText = textField.text as NSString?,
            preText.replacingCharacters(in: range, with: string).count <= MAX_TEXT_LENGTH else {
            return false
        }

        return true
    }

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। কোনও বাগ ছাড়াই নিখুঁতভাবে কাজ করে।
10623169

2

আলাদিনের উত্তরে আমার যুক্ত করার মতো কিছু আছে:

  1. আপনার দর্শন নিয়ন্ত্রকের সাথে সামঞ্জস্য করা উচিত should UITextFieldDelegate

    class MyViewController: UIViewController, UITextViewDelegate {
    
    }
    
  2. আপনার পাঠ্যক্ষেত্রের প্রতিনিধি সেট করুন: ডেলিগেট সেট করতে, আপনি পাঠ্যক্ষেত্র থেকে স্টোরিবোর্ডে আপনার দৃশ্যের নিয়ামককে টেনে আনতে পারেন। আমি মনে করি এটি কোড এ সেট করা ভাল

  3. আপনার ভিউ কন্ট্রোলারে পদ্ধতিটি প্রয়োগ করুন: textField(_:shouldChangeCharactersInRange:replacementString:)


2

আমি @ ফ্রুওয়ের উপর ভিত্তি করে একটি পরিপূরক উত্তর দিচ্ছি। আমি মনে করি তার উত্তরটি সবচেয়ে সুন্দর উপায়। এটি পুনরায় ব্যবহার করতে পারি এটি একটি সাধারণ নিয়ন্ত্রণ বেক করুন। এবং এখানে কোনও ফাঁসের সমস্যা নেই।

    private var kAssociationKeyMaxLength: Int = 0

    extension UITextField {

        @IBInspectable var maxLength: Int {
            get {
                if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLength) as? Int {
                    return length
                } else {
                    return Int.max
                }
            }
            set {
                objc_setAssociatedObject(self, &kAssociationKeyMaxLength, newValue, .OBJC_ASSOCIATION_RETAIN)
                self.addTarget(self, action: #selector(checkMaxLength), for: .editingChanged)
            }
        }

//The method is used to cancel the check when use Chinese Pinyin input method.
        //Becuase the alphabet also appears in the textfield when inputting, we should cancel the check.
        func isInputMethod() -> Bool {
            if let positionRange = self.markedTextRange {
                if let _ = self.position(from: positionRange.start, offset: 0) {
                    return true
                }
            }
            return false
        }


        func checkMaxLength(textField: UITextField) {

            guard !self.isInputMethod(), let prospectiveText = self.text,
                prospectiveText.count > maxLength
                else {
                    return
            }

            let selection = selectedTextRange
            let maxCharIndex = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
            text = prospectiveText.substring(to: maxCharIndex)
            selectedTextRange = selection
        }



    }

2

কেবল স্ট্রিংয়ের অক্ষরের সংখ্যা দিয়ে পরীক্ষা করুন

  1. নিয়ন্ত্রক আনন্সিলে ডেলিগেট দেখতে একটি প্রতিনিধি যুক্ত করুন
    class YorsClassName : UITextFieldDelegate {

    }
  1. পাঠ্যক্ষেত্রের জন্য অনুমোদিত চরগুলির সংখ্যা পরীক্ষা করুন
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField.text?.count == 1 {
        return false
    }
    return true
}

দ্রষ্টব্য: এখানে আমি কেবল পাঠ্যফিল্ডে অনুমোদিত চরটি পরীক্ষা করেছি


2

এই ফ্যাটি উত্তরের জন্য আপডেট

ধন্যবাদ

extension UITextField {

    /// Runtime key
    private struct AssociatedKeys {
        /// max lenght key
        static var maxlength: UInt8 = 0
        /// temp string key
        static var tempString: UInt8 = 0
    }

    /// Limit the maximum input length of the textfiled
    @IBInspectable var maxLength: Int {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.maxlength) as? Int ?? 0
        }
        set {
            objc_setAssociatedObject(self, &AssociatedKeys.maxlength, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            addTarget(self, action: #selector(handleEditingChanged(textField:)), for: .editingChanged)
        }
    }

    /// temp string
    private var tempString: String? {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.tempString) as? String
        }
        set {
            objc_setAssociatedObject(self, &AssociatedKeys.tempString, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }

    /// When the text changes, process the amount of text in the input box so that its length is within the controllable range.
    @objc private func handleEditingChanged(textField: UITextField) {

        /// Special Processing for Chinese Input Method
        guard markedTextRange == nil else { return }

        if textField.text?.count == maxLength {

            /// SET lastQualifiedString where text length == max lenght
            tempString = textField.text
        } else if textField.text?.count ?? 0 < maxLength {

            /// clear lastQualifiedString when text lengeht > maxlength
            tempString = nil
        }

        /// keep current text range in arcgives
        let archivesEditRange: UITextRange?

        if textField.text?.count ?? 0 > maxLength {

            /// if text length > maxlength,remove last range,to move to -1 postion.
            let position = textField.position(from: safeTextPosition(selectedTextRange?.start), offset: -1) ?? textField.endOfDocument
            archivesEditRange = textField.textRange(from: safeTextPosition(position), to: safeTextPosition(position))
        } else {

            /// just set current select text range
            archivesEditRange = selectedTextRange
        }

        /// main handle string max length
        textField.text = tempString ?? String((textField.text ?? "").prefix(maxLength))

        /// last config edit text range
        textField.selectedTextRange = archivesEditRange
    }

    /// get safe textPosition
    private func safeTextPosition(_ optionlTextPosition: UITextPosition?) -> UITextPosition {

        /* beginningOfDocument -> The end of the the text document. */
        return optionlTextPosition ?? endOfDocument
    }
}

1

সুইফট 4-এ কাজ করা

// পদক্ষেপ 1 সেট UITextFieldDelegate

    class SignUPViewController: UIViewController , UITextFieldDelegate {

       @IBOutlet weak var userMobileNoTextFiled: UITextField!

        override func viewDidLoad() {
            super.viewDidLoad()

// পদক্ষেপ 2 সেট প্রতিনিধি
ব্যবহারকারীমোবাইলনটেক্সটফিল্ড.ডিলেগেট = স্ব / // সেট প্রতিনিধি}

     func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    //        guard let text = userMobileNoTextFiled.text else { return true }
    //        let newLength = text.count + string.count - range.length
    //        return newLength <= 10
    //    }

// পদক্ষেপ 3 কল ফানক

        func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
            let maxLength = 10          // set your need
            let currentString: NSString = textField.text! as NSString
            let newString: NSString =
                currentString.replacingCharacters(in: range, with: string) as NSString
            return newString.length <= maxLength
        }
    }

1

এই উত্তরটি সুইফট 4-এর জন্য এবং ব্যাকস্পেসটি পেরিয়ে যাওয়ার ক্ষমতা নিয়ে বেশ সোজা এগিয়ে।

func textField(_ textField: UITextField, 
               shouldChangeCharactersIn range: NSRange, 
               replacementString string: String) -> Bool {
    return textField.text!.count < 10 || string == ""
}

এটি অনুলিপি এবং পেস্ট পরিচালনা করে না
কর্নার

1

সুইফট 4-এ পাঠ্যটি ব্লক করার পরে টেক্সটফিল্ড সীমাবদ্ধ অক্ষর

func textField(_ textField: UITextField, shouldChangeCharactersIn range: 
    NSRange,replacementString string: String) -> Bool
{


    if textField == self.txtDescription {
        let maxLength = 200
        let currentString: NSString = textField.text! as NSString
        let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
        return newString.length <= maxLength
    }

    return true


}

1

কেবলমাত্র ক্ষেত্রেই, স্ট্রিংটিতে প্রয়োগ করার আগে ব্যাপ্তি আকার রক্ষা করতে ভুলবেন না। অন্যথায়, ব্যবহারকারী যদি এটি করে তবে আপনি ক্র্যাশ পাবেন:

সর্বাধিক দৈর্ঘ্যের পাঠ্য টাইপ করুন কিছু সন্নিবেশ করুন (দৈর্ঘ্যের সীমাবদ্ধতার কারণে কিছুই sertedোকানো হবে না তবে আইওএস এ সম্পর্কে জানে না) সন্নিবেশ পূর্বাবস্থায় ফেরা (আপনার ক্রাশ হয়, কারণের পরিধিটি প্রকৃত স্ট্রিংয়ের চেয়ে বেশি হবে)

এছাড়াও, আইওএস 13 ব্যবহারকারীর দুর্ঘটনাক্রমে ইশারা দ্বারা এটি ট্রিগার করতে পারে

আমি আপনাকে এটি আপনার প্রকল্পে যুক্ত করার পরামর্শ দিচ্ছি

extension String {
    func replace(with text: String, in range: NSRange) -> String? {
        guard range.location + range.length <= self.count else { return nil }
        return (self as NSString).replacingCharacters(in: range, with: text)
    }
}

এবং এটি এর মতো ব্যবহার করুন:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    guard let newText = textView.text.replace(with: text, in: range) else { return false }
    return newText.count < maxNumberOfCharacters
}

অন্যথায়, আপনি ক্রমাগত আপনার অ্যাপ্লিকেশায় ক্রাশ হয়ে যাবেন


0

এখানে একটি সুইফ্ট 3.2+ বিকল্প যা অপ্রয়োজনীয় স্ট্রিং ম্যানিপুলেশন এড়ায়। এই ক্ষেত্রে, সর্বোচ্চ দৈর্ঘ্য 10:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let text = textField.text ?? ""

    return text.count - range.length + string.count <= 10
}

0

আমি এই পদক্ষেপটি ব্যবহার করি, ভিউডিডলোডে প্রথম প্রতিনিধি টেক্সফিল্ড সেট করুন।

    override func viewDidLoad() {
        super.viewDidLoad()

        textfield.delegate = self

    }

এবং তারপরে UITextFieldDelegate অন্তর্ভুক্ত করার পরে চেঞ্জেরচ্যাক্টরসগুলিতে উচিত।

extension viewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
                let newLength = (textField.text?.utf16.count)! + string.utf16.count - range.length
                if newLength <= 8 { 
                    return true
                } else {
                    return false
                }
            }
    }

0

যদি আপনার একাধিক টেক্সটফিল্ড থাকে তবে এক পৃষ্ঠায় বিভিন্ন দৈর্ঘ্যের চেক রয়েছে আমি একটি সহজ এবং সংক্ষিপ্ত সমাধান খুঁজে পেয়েছি।

class MultipleTextField: UIViewController {

    let MAX_LENGTH_TEXTFIELD_A = 10
    let MAX_LENGTH_TEXTFIELD_B = 11

    lazy var textFieldA: UITextField = {
        let textField = UITextField()
        textField.tag = MAX_LENGTH_TEXTFIELD_A
        textField.delegate = self
        return textField
    }()
    lazy var textFieldB: UITextField = {
        let textField = UITextField()
        textField.tag = MAX_LENGTH_TEXTFIELD_B
        textField.delegate = self
        return textField
    }()
}

extension MultipleTextField: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        return (range.location < textField.tag) && (string.count < textField.tag)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.