আমি যে পরিস্থিতিটি করার চেষ্টা করছিলাম সেটি হ'ল নেস্টেড ইউআইএসট্যাকভিউ'র ভিতরে নিয়ন্ত্রণ ব্যবহার করে একটি নিয়ন্ত্রণ প্যানেল তৈরি করা। কিছু নিয়ন্ত্রণগুলির মধ্যে ইউআইটি বাটন সহ ইউআইটিেক্সটফিল্ডের অন্যরা ছিল। এছাড়াও, নিয়ন্ত্রণগুলি সনাক্ত করতে লেবেল ছিল। আমি যা করতে চেয়েছিলাম তা নিয়ন্ত্রণ প্যানেলের পিছনে একটি বড় "অদৃশ্য" বোতামটি রাখা হয়েছিল যাতে কোনও ব্যবহারকারী যদি বোতাম বা পাঠ্য ক্ষেত্রের বাইরের কোনও অংশে ট্যাপ করেন, আমি তখন তা ধরতে পারি এবং পদক্ষেপ নিতে পারি - মূলত কোনও পাঠ্য যদি কোনও কীবোর্ড খারিজ করে দেয় ক্ষেত্রটি সক্রিয় ছিল (পদত্যাগপত্রে রিসপন্ডার)। তবে কন্ট্রোল প্যানেলে কোনও লেবেল বা অন্য ফাঁকা জায়গায় ট্যাপ দেওয়া জিনিসগুলি অতিক্রম করবে না। উপরোক্ত আলোচনাগুলি নীচে আমার উত্তরটি সামনে আসতে সহায়ক ছিল।
মূলত, আমি ইউআইএসট্যাকভিউকে উপ-শ্রেণিবদ্ধ করেছিলাম এবং স্পর্শের প্রয়োজন হয় এমন নিয়ন্ত্রণের ধরণটি অনুসন্ধান করার জন্য "পয়েন্ট (ভিতরে: সহ) রীতিটি ওভাররাইট করেছিলাম এবং লেবেলের মতো বিষয়গুলিকে" উপেক্ষা "করতে পারি যা আমি উপেক্ষা করতে চাইতাম। এটি ইউআইএসট্যাকভিউয়ের অভ্যন্তরের জন্যও পরীক্ষা করে যাতে জিনিসগুলি নিয়ন্ত্রণ প্যানেল কাঠামোতে পুনরাবৃত্তি করতে পারে।
কোডটি হওয়া উচিত তার চেয়ে একটু বেশি ভারবস। তবে এটি ডিবাগ করতে সহায়ক ছিল এবং আশা করা যায় যে রুটিনটি কী করছে তাতে আরও স্পষ্টতা পাওয়া যায়। ইউআইএসট্যাকভিউ'র ক্লাসটি পাসথ্রুস্ট্যাকে পরিবর্তন করার জন্য কেবল ইন্টারফেস বিল্ডারে নিশ্চিত হন।
class PassThruStack: UIStackView {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
for view in self.subviews {
if !view.isHidden {
let isStack = view is UIStackView
let isButton = view is UIButton
let isText = view is UITextField
if isStack || isButton || isText {
let pointInside = view.point(inside: self.convert(point, to: view), with: event)
if pointInside {
return true
}
}
}
}
return false
}
}