সুইফটে ইউআইটিেক্সটফিল্ড এবং ইউআইটিেক্সটভিউয়ের কার্সার পজিশন নির্ধারণ এবং সেট করা


109

আমি UITextFieldএর ব্যবহারকারীর অবস্থান এবং এর সাথে কীভাবে কাজ করব তা পরীক্ষা-নিরীক্ষা করছি been আমি অনেকগুলি সম্পর্ক অবজেক্টিভ-সি উত্তর খুঁজে পেয়েছি in

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

নীচের উত্তরটি আমার উদ্দেশ্য এবং সিলেখার অনুবাদ থেকে ফলাফল।

উত্তর:


316

নিম্নলিখিত সামগ্রীটি উভয় UITextFieldএবং এর জন্য প্রযোজ্য UITextView

দরকারী তথ্য

পাঠ্য ক্ষেত্রের পাঠ্যের একেবারে শুরু:

let startPosition: UITextPosition = textField.beginningOfDocument

পাঠ্য ক্ষেত্রের পাঠ্যের একেবারে শেষ:

let endPosition: UITextPosition = textField.endOfDocument

বর্তমানে নির্বাচিত ব্যাপ্তি:

let selectedRange: UITextRange? = textField.selectedTextRange

কার্সারের অবস্থান পান

if let selectedRange = textField.selectedTextRange {

    let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)

    print("\(cursorPosition)")
}

কার্সারের অবস্থান নির্ধারণ করুন

অবস্থান নির্ধারণের জন্য, এই সমস্ত পদ্ধতিগুলি আসলে একই শুরু এবং শেষ মানগুলির সাথে একটি পরিসীমা সেট করে।

শুরুতে

let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)

অবশেষে

let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)

বর্তমান কার্সারের অবস্থানের বামে এক অবস্থানে

// only if there is a currently selected range
if let selectedRange = textField.selectedTextRange {

    // and only if the new position is valid
    if let newPosition = textField.position(from: selectedRange.start, offset: -1) {

        // set the new position
        textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
    }
}

একটি স্বেচ্ছাসেবী অবস্থান

শুরুতে শুরু করুন এবং 5 টি অক্ষর ডানদিকে সরান।

let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {

    textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}

সম্পর্কিত

সমস্ত পাঠ্য নির্বাচন করুন

textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)

পাঠ্যের একটি ব্যাপ্তি নির্বাচন করুন

// Range: 3 to 7
let startPosition = textField.position(from: textField.beginningOfDocument, offset: 3)
let endPosition = textField.position(from: textField.beginningOfDocument, offset: 7)

if startPosition != nil && endPosition != nil {
    textField.selectedTextRange = textField.textRange(from: startPosition!, to: endPosition!)
}

বর্তমান কার্সার অবস্থানে পাঠ্য সন্নিবেশ করান

textField.insertText("Hello")

মন্তব্য

  • ব্যবহার করুন textField.becomeFirstResponder()টেক্সট ক্ষেত্রের ফোকাস দিতে এবং কীবোর্ড করলেই হবে।

  • কিছু পরিসরে পাঠ্য কীভাবে পাবেন তা এই উত্তরটি দেখুন ।

আরো দেখুন


স্টার্টপজিশনের উদ্দেশ্য কী? আপনি এটি দিয়ে কি করতে পারেন? এছাড়াও কার্সার পজিশন পাওয়ার জন্য কারও কী প্রয়োজন হতে পারে?
মধু

2
@ হানি, আমি এখানে দুটি ভিন্ন জিনিস উল্লেখ করতে সেই পরিবর্তনশীল নামটি ব্যবহার করেছি। প্রথমটি ছিল পাঠ্য ক্ষেত্রের সূচনা। আপনি যদি সেখানে কার্সারটি সরিয়ে নিতে চান তবে এটি কার্যকর হবে। দ্বিতীয়টি ছিল পাঠ্যগুলির একটি নির্বাচিত পরিসীমাটির ভিক্ষাবৃত্তি refer আপনি যদি এই ব্যাপ্তিটি অনুলিপি করতে চান বা এটিতে কিছু বৈশিষ্ট্য নির্ধারণ করতে চান তবে এটি কার্যকর।
সুরগাচ

পাঠ্যক্ষেত্র খালি থাকাকালীন কার্সারকে ডানে সরানোর কোনও কি কি আছে? আমি আপনার উত্তর অনুসরণ করেছিলাম কিন্তু আমি এটি করতে পারে না।
ইউসেল বায়রাম

1
@ ইউসেলবায়েরাম, আপনি এইচ ব্যবহারের পরে কার্সারটি রাখতে পারেন textField.endOfDocument। আপনি অনুপস্থিত অক্ষরগুলি উপস্থাপন করতে আন্ডারস্কোর বা স্পেস ব্যবহার করতে পারেন।
সুরগাচ

1
@ অ্যারিল এসডি, আমি দুঃখিত, আমি এটি নিয়ে কিছুক্ষণ কাজ করিনি। মনে নেই।
সুরগাচ

42

আমার ক্ষেত্রে আমাকে ডিসপ্যাচকিউ ব্যবহার করতে হয়েছিল:

func textViewDidBeginEditing(_ textView: UITextView) {

   DispatchQueue.main.async{
      textField.selectedTextRange = ...
   }
}

এটি এবং অন্যান্য থ্রেড থেকে অন্য কিছুই কাজ করে না।

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


2
এটি কোনও বিলম্ব নয় তবে পরবর্তী রান লুপ। সম্ভবত পাঠ্যক্ষেত্র নির্বাচিত ব্যাপ্তি নামক একই ফাংশন দ্বারা পরিবর্তিত হচ্ছে textViewDidBeginEditing। সুতরাং এটিকে কাতারে রেখে, কলার শেষ হওয়ার পরে এটি ঘটবে।
মাইকেল ওজেরিয়ানস্কি

@ মিশেল ওজারিয়ানস্কি হ্যাঁ, আমিও তাই মনে করি। তবে এটি প্রশ্নটি উত্থাপন করে - ম্যানুয়ালি কার্সারের অবস্থান নির্ধারণ করার সঠিক পদ্ধতিটি কী?
টাইমটাউন্ডার

আমার ক্ষেত্রেও এই সমাধানটি কাজ করেছে
হাটোরি হানজি

1

আপনার পয়েন্টে কার্সার স্থিতির জন্য:

textView.beginFloatingCursor(at: CGPoint(x: 10.0, y: 10.0))

কার্সার অবস্থান পুনরায় সেট করার জন্য:

textView.endFloatingCursor()

দ্রষ্টব্য : এই উদাহরণটি পাঠ্যদর্শন এবং পাঠ্যক্ষেত্র উভয় ক্ষেত্রেই কাজ করে।


টেক্সটভিউ বা টেক্সটফিল্ডে কার্সার অবস্থান নির্ধারণের জন্য @ সুরগ ফ্লোটিং কার্সর একটি পদ্ধতি।
পার্থ প্যাটেল

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