আইওলগুলি পুনরাবৃত্তি করার সাথে আউটলেটগুলি সংযুক্ত হতে পারে না


144

আমি সবেমাত্র একটি অ্যাপ্লিকেশন তৈরি করেছি এবং @ আইবিআউটলেটকে স্টোরিবোর্ডে আঁকতে শুরু করেছি। আমি ইউটিআইটিভিউকেল প্রোটোটাইপ সেলটিতে বেসিক স্টাইলের সাথে তাদের কয়েকটিকে লেবেলে সংযুক্ত করছি। স্টোরিবোর্ডে এই ত্রুটিটি পেয়ে গেলেও আমি যখন এটি সংযোগ করি

টেবিলভিউ কনট্রোলার থেকে ইউআইএবেবেলে বিশদ পাঠ্য আউটলেটটি অবৈধ। আউটলেটগুলি পুনরাবৃত্তি সামগ্রীটির সাথে সংযুক্ত হতে পারে না।

কেউ আমাকে সাহায্য করতে পারেন? আমি এটি সর্বদা সফলভাবে করি সেভাবে সেট আপ করেছি তবে এবার এটি আমাকে এই ত্রুটিটি ছুঁড়েছে।


54
আপনি কোনও ইউআইভিউউকন্ট্রোলার সাবক্লাসের আইবিআউটলেটতে প্রোটোটাইপ সেলে কোনও লেবেল সংযোগ করতে পারবেন না - আপনাকে এটি কোনও ইউআইটিএবভিউসেল সাবক্লাসের আইবিআউটলেটতে সংযুক্ত করতে হবে।
পলউ 11 11

ঠিক আছে ধন্যবাদ! :) তাই ঠিক তাই আমি বুঝতে পেরেছি: কেন আপনি ব্যাখ্যা করতে পারেন?
টমব্লাস্টা

3
আপনার যে কোনও সেল থাকতে পারে এবং কেবল একটি একক দর্শন নিয়ামক থাকতে পারে - তাই কোন কক্ষের লেবেলটি ভিউ কন্ট্রোলার আইবিআউটলেট সাথে সংযুক্ত করা উচিত?
Paulw11

ঠিক আছে, সুতরাং আপনি কেন কেবলমাত্র একক দর্শন নিয়ামকোষের জন্য সেল টেক্সটের জন্য সেলফরআরআউটইন্ডেক্সপথটি ব্যবহার করতে পারেন নি? ধন্যবাদ!
টমব্লাস্টা

3
কারণ আউটলেটগুলি অবজেক্টের সাথে আবদ্ধ থাকে (যেমন লেবেলগুলিতে) যখন ভিউ কন্ট্রোলার লোড হয় that সেই সময়ে কোনও ঘর নেই, তাই কোনও বাঁধাই করার জন্য কোনও লেবেল নেই, এবং যদি ঘরগুলি থাকে তবে আপনি
কোনটি

উত্তর:


168

একটি টেবিল ভিউ সেল সাবক্লাস তৈরি করুন এবং এটিকে প্রোটোটাইপের শ্রেণি হিসাবে সেট করুন। আউটলেটগুলি সেই শ্রেণিতে যুক্ত করুন এবং তাদের সাথে সংযুক্ত করুন। এখন আপনি যখন ঘরটি কনফিগার করবেন আপনি আউটলেটগুলি অ্যাক্সেস করতে পারবেন।


9
@ আপনি কি দয়া করে এই আউটলেটগুলি অ্যাক্সেস করার বিষয়ে আরও তথ্য যুক্ত করতে পারেন?
হুয়ান বোয়েরো

1
জুয়ান পাবলো - তিনি যা বলছেন তা হ'ল কাস্টম টেবিল ভিউ সেলটি ব্যবহার করা স্বাভাবিক। আপনি ঘরটি যেখানে ব্যবহার করছেন সেদিকেই কোনও সীমাবদ্ধতার জন্য আপনি আউটলেটটি সেট করতে পারবেন না, পরিবর্তে আপনার সেলফোরআউটিআইডেক্সপ্যাথে এটি করা দরকার - উদাহরণস্বরূপ - কাস্টমসেলসিওএনট্রেইন্ট_রো_উইথকনস্ট্যান্ট = 25.0;
স্টুয়ার্ট পি।

70

স্টোরিবোর্ডের মাধ্যমে আপনার কাছে দুটি ধরণের টেবিল ভিউ সেল সরবরাহ করা হয়েছে, সেগুলি হ'ল ডায়নামিক প্রোটোটাইপস এবং স্ট্যাটিক সেল

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

1. ডায়নামিক প্রোটোটাইপস

নাম থেকে, এই ধরণের ঘরটি গতিশীলভাবে উত্পন্ন হয়। এগুলি আপনার কোডের মাধ্যমে স্টোরিবোর্ডের মাধ্যমে নিয়ন্ত্রণ করা হয়। টেবিল ভিউয়ের প্রতিনিধি এবং ডেটা উত্সের সাহায্যে আপনি কোষের সংখ্যা, কোষের উচ্চতা, কোষের প্রোটোটাইপ প্রোগ্রামগতভাবে উল্লেখ করতে পারেন।

আপনি যখন কোনও সারণীকে আপনার টেবিল দর্শনে টেনে আনেন, আপনি ঘরের একটি প্রোটোটাইপ ঘোষণা করছেন। এরপরে আপনি এই প্রোটোটাইপের যেকোন পরিমাণ কোষ বেস তৈরি করতে পারেন এবং cellForRowপ্রোগ্রামের মাধ্যমে পদ্ধতিতে তাদের টেবিল ভিউতে যুক্ত করতে পারেন । এর সুবিধাটি হ'ল আপনাকে নিজের দ্বারা যুক্ত করা সমস্ত দর্শন সহ প্রতিটি কক্ষ তৈরির পরিবর্তে কেবলমাত্র 1 টি প্রোটোটাইপ সংজ্ঞায়িত করতে হবে (স্ট্যাটিক সেলটি দেখুন)।

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

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

এই সমস্যাটি সমাধান করার জন্য আপনাকে আপনার প্রোটোটাইপ লেবেলটিকে কোনও UITableViewCellবস্তুর সাথে সংযুক্ত করতে হবে । এ UITableViewCellহ'ল কোষগুলির একটি প্রোটোটাইপ এবং আপনি যতগুলি সেল অবজেক্ট আপনার ইচ্ছে মতো সূচনা করতে পারেন, সেগুলির প্রতিটি তারপরে আপনার স্টোরিবোর্ড সারণী সেল প্রোটোটাইপ থেকে উত্পন্ন এমন দৃশ্যের সাথে সংযুক্ত থাকে।

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

অবশেষে, আপনার cellForRowপদ্ধতিতে, UITableViewCellক্লাস থেকে কাস্টম সেল তৈরি করুন এবং লেবেল দিয়ে মজাদার স্টাফ করুন

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! YourCell

    cell.label.text = "it works!"

    return cell
}

২. স্ট্যাটিক সেল

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

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

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


আমার কোডে ফ্যাংমিংনিং, আমি এখনও পাঠ্য লেবেল পরিবর্তন করতে পারি না, আমি সেলটিতে ক্লাস সংযুক্ত করেছি, সনাক্তকারী সহ সঠিক ঘর বলেছি, তবে এখনও পরিবর্তন হচ্ছে না
জোর্জে সরাইভা

@জোরজেসরাইভা চ্যাট রুমে এই আলোচনা করুন। স্টকওভারফ্লো
রুমগুলি

আমি নিখোঁজ ছিল ! YourCell+100
ড্যানিয়েল স্প্রিঞ্জার

মাত্র 6 মাসের জন্য কোডে কোনও প্রকল্পে কাজ করার পরে কিছুটা রিফ্রেশার রাখা সর্বদা ভাল।
ttorbik

ধন্যবাদ, আমার সমস্যাটি হ'ল আমি এটিকে ঘরের পরিবর্তে ভিউকন্ট্রোলারের সাথে সংযুক্ত করছি।
স্টেলা

23

আপনি প্রদর্শন সেটিংস এবং অন্যান্য অপশন করার জন্য একটি টেবিল ভিউ (বিল্ট-ইন সেটিংস অ্যাপ্লিকেশান পছন্দ করে) ব্যবহার করছেন, তাহলে আপনি আপনার সেট করতে পারেন ছক সামগ্রী দেখেন করার স্ট্যাটিক সেল অধীনে পরিদর্শক আরোপ করা । এছাড়াও, এটি করার জন্য, আপনাকে অবশ্যই নিজের টেবিল ভিউটি একটি ইউআইটিএবলভিউ কনট্রোলার ইনস্ট্যান্সে এম্বেড করতে হবে।


এই সহজ উপায় হয় এবং দ্রুত এবং গৃহীত উত্তর এই প্রোগ্রামটিতে হওয়া উচিত
জেইমি Agudo

5

অথবা আপনাকে ভিউতে থাকা অবজেক্টটি উল্লেখ করতে IBOutlet ব্যবহার করতে হবে না । আপনি লেবেলটি টেবিলভিউসেলকে একটি ট্যাগ মান দিতে পারেন , উদাহরণস্বরূপ ট্যাগটি 123 এ সেট করুন (এটি বৈশিষ্ট্য পরিদর্শক দ্বারা করা যেতে পারে)। তারপরে আপনি লেবেলটি অ্যাক্সেস করতে পারবেন

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "someID", for: indexPath)

    let label = cell.viewWithTag(123) as! UILabel //refer the label by Tag

    switch indexPath.row {
    case 0:
        label.text = "Hello World!"
    default:
        label.text = "Default"
    }
    return cell 
}

খুব সহজ এবং সহজ! +100
জুলিয়ান সিলভেস্ট্রি

1

আমার সাথে আমার একটি রয়েছে UIViewcontrollerএবং এতে আমার কাস্টম সেল সহ একটি টেবিলভিউ রয়েছে। আমি মধ্যে UILabel আমার নালী মানচিত্র UItableviewcellথেকে UIViewControllerতারপর ত্রুটি পেয়েছিলাম।


কাস্টম সেল ক্লাস তৈরি করুন এবং আপনার এই কাস্টম ক্লাসে আইবুলেটলেট ইনস্ট্যান্ট করুন
শওকেত শেখ

0

বেশিরভাগ লোকেরা যেমন উল্লেখ করেছেন যে সাবক্লাসিংয়ের ফলে UITableViewCell এই সমস্যাটির সমাধান হয়। তবে এটি অনুমোদিত না হওয়ার কারণ প্রোটোটাইপ সেল ( ইউআইটিএবলভিউসেল ) অ্যাপল দ্বারা সংজ্ঞায়িত করা হয়েছে এবং আপনি এতে নিজের কোনও আউটলেট যোগ করতে পারবেন না।


0

কখনও কখনও Xcode সঠিকভাবে সেল আউটলেট সংযোগের উপরে নিয়ন্ত্রণ করতে পারে না।

কোনওভাবে আমার বর্তমান সেলের লেবেল / বোতামটি অন্য একটি ঘরকে সংযুক্ত করেছে আমি কেবল সেগুলি সরিয়েছি এবং ত্রুটিটি চলে যায়।


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