স্টোরিবোর্ড সহ কাস্টম টেবিল ভিউ বিভাগের শিরোনাম এবং পাদচরণগুলি কীভাবে কার্যকর করা যায়


176

একটি স্টোরিবোর্ড ব্যবহার না করেই কেবলমাত্র আমরা একটি ড্র্যাগ পারে UIView, ক্যানভাস সম্মুখের দিকে এটি খুঁজে রাখা এবং তারপর এটি সেট tableView:viewForHeaderInSectionবা tableView:viewForFooterInSectionপ্রতিনিধি পদ্ধতি।

আমরা স্টোরিবোর্ড দিয়ে এটি কীভাবে সম্পন্ন করব যেখানে আমরা কোনও ইউআইভিউকে ক্যানভাসে টেনে আনতে পারি না

উত্তর:


90

আমি জানি এই প্রশ্নটি আইওএস 5 এর জন্য ছিল, তবে ভবিষ্যতের পাঠকদের সুবিধার জন্য লক্ষ্য করুন যে কার্যকর iOS 6 এর dequeueReusableHeaderFooterViewWithIdentifierপরিবর্তে আমরা এখন ব্যবহার করতে পারি dequeueReusableCellWithIdentifier

সুতরাং viewDidLoad, হয় registerNib:forHeaderFooterViewReuseIdentifier:বা কল registerClass:forHeaderFooterViewReuseIdentifier:। তারপরে viewForHeaderInSection, কল করুন tableView:dequeueReusableHeaderFooterViewWithIdentifier:। আপনি এই এপিআই সহ কোনও সেল প্রোটোটাইপ ব্যবহার করবেন না (এটি হয় এনআইবি ভিত্তিক ভিউ বা প্রোগ্রামগতভাবে তৈরি ভিউ) নয়, তবে এটি শিরোনাম শিরোনাম এবং পাদচরণকারীদের জন্য নতুন এপিআই।


13
দীর্ঘশ্বাস ফেলুন যে একটি প্রোটো সেল পরিবর্তে এনআইবি ব্যবহার সম্পর্কে এই দুটি পরিষ্কার উত্তর বর্তমানে 5 টি ভোটের নিচে এবং "প্রোটো কোষ দিয়ে এটি হ্যাক করুন" এর উত্তর 200
এরও

5
পার্থক্যটি হ'ল টিমে থেকে হ্যাকের সাহায্যে আপনি একই স্টোরিবোর্ডে আপনার নকশা তৈরি করতে পারবেন এবং পৃথক Xib ব্যবহার করতে পারবেন না
সিড্রিকসৌব্রি

আপনি কি কোনওভাবে পৃথক এনআইবি ফাইল ব্যবহার এড়াতে এবং এর পরিবর্তে স্টোরিবোর্ড ব্যবহার করতে পারেন?
ফোরইগার

@ ফোরইগার - এই মুহুর্তে নয়। স্টোরিবোর্ডের সারণী দর্শনগুলির মধ্যে এটি একটি অদ্ভুত বাদ রয়েছে, তবে এটি এটিই। প্রোটোটাইপ সেলগুলি সহ যে ক্লডগি হ্যাকটি চান তা ব্যবহার করুন তবে ব্যক্তিগতভাবে আমি শিরোনাম / পাদচরণ দর্শনগুলির জন্য কেবল এনআইবিগুলির বিরক্তি সহ্য করছি।
রব

2
আইএমএইচও, কেবলমাত্র এটি "পুরাতন" বলে যথেষ্ট শক্তিশালী নয়। গৃহীত উত্তর হ'ল শিরোনাম এবং পাদচরণের দর্শনগুলির জন্য প্রোটোটাইপ কোষ থাকতে পারে না এই সত্যটি সম্পর্কে জানার একটি কুটিল উপায়। তবে আমি মনে করি এটি কেবল ভুল, কারণ এটি অনুমান করে যে শিরোনাম এবং পাদলেখগুলির শৃঙ্খলা সেলগুলি সনাক্ত করার মতোই কাজ করে (যা শিরোনাম / পাদচরণকারীদের জন্য একটি নতুন এপিআইয়ের উপস্থিতি প্রস্তাবিত নাও হতে পারে)। স্বীকৃত উত্তরটি এমন একটি সৃজনশীল কাজ যা আইওএস 5 এর মধ্যে বোধগম্য ছিল, তবে, আইওএস 6 এবং তারপরে, শিরোনাম / পাদলেখ পুনরায় ব্যবহারের জন্য স্পষ্টভাবে নকশিত এপিআই ব্যবহার করা ভাল।
রব

384

কেবলমাত্র আপনার বিভাগ শিরোনাম এবং / অথবা পাদচরণ হিসাবে একটি প্রোটোটাইপ সেল ব্যবহার করুন।

  • একটি অতিরিক্ত কক্ষ যুক্ত করুন এবং এতে আপনার পছন্দসই উপাদানগুলি দিন।
  • নির্দিষ্ট কিছুতে শনাক্তকারীকে সেট করুন (আমার ক্ষেত্রে সেকশনহিডার)
  • বাস্তবায়ন tableView:viewForHeaderInSection:পদ্ধতি বা tableView:viewForFooterInSection:পদ্ধতি
  • [tableView dequeueReusableCellWithIdentifier:]শিরোনাম পেতে ব্যবহার করুন
  • tableView:heightForHeaderInSection:পদ্ধতি বাস্তবায়ন ।

(স্ক্রিনশট দেখুন)

-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    static NSString *CellIdentifier = @"SectionHeader"; 
    UITableViewCell *headerView = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (headerView == nil){
        [NSException raise:@"headerView == nil.." format:@"No cells with matching CellIdentifier loaded from your storyboard"];
    }
    return headerView;
}  

সম্পাদনা করুন: শিরোনামের শিরোনাম কীভাবে পরিবর্তন করবেন (মন্তব্য করা প্রশ্ন):

  1. শিরোনামের ঘরে একটি লেবেল যুক্ত করুন
  2. একটি নির্দিষ্ট সংখ্যায় লেবেলের ট্যাগটি সেট করুন (যেমন 123)
  3. আপনার tableView:viewForHeaderInSection:পদ্ধতিতে কল করে লেবেল পান:
    UILabel *label = (UILabel *)[headerView viewWithTag:123]; 
  1. একটি নতুন শিরোনাম সেট করতে এখন আপনি লেবেলটি ব্যবহার করতে পারেন:
    [label setText:@"New Title"];

7
পার্টিতে দেরীতে, তবে বিভাগের শিরোনাম দৃশ্যে ক্লিকগুলি অক্ষম করতে, কেবল viewForHeaderInSection পদ্ধতিতে সেল কন্টেন্টভিউটি ফিরিয়ে দিন (কোনও কাস্টম ইউআইভিউ যুক্ত করার দরকার নেই)।
পলভগুলি

3
@PaulVon আমি কি করতে যে আমার সর্বশেষ প্রকল্পে চেষ্টা করেছি, কিন্তু যদি আপনি যে কি শুধু আপনার হেডার এক longpress চেষ্টা এবং এটি বিপর্যস্ত হবে
সম্মান

13
আইওএস .0.০-এ, dequeueReusableHeaderFooterViewWithIdentifierচালু করা হয়েছে এবং এখন এই উত্তরের চেয়ে পছন্দ করা হচ্ছে। তবে এটি সঠিকভাবে ব্যবহার করা আরও পদক্ষেপ গ্রহণ করে। আমার গাইড @ samwize.com/2015/11/06/… আছে
11:57 এ সাময়াইজ করুন

3
আপনার বিভাগটি হাইডারভিউগুলি ইউআইটিএবলভিউকেলগুলি ব্যবহার করে তৈরি করবেন না, এটি অপ্রত্যাশিত আচরণ তৈরি করবে। পরিবর্তে একটি ইউআইভিউ ব্যবহার করুন।
প্রশংসা করুন

4
দয়া করে কখনও UITableViewCellশিরোনামের দর্শন হিসাবে ব্যবহার করবেন না । ভিজ্যুয়াল গ্ল্যাচগুলি ডিবাগ করা আপনার পক্ষে খুব কঠিন হয়ে উঠবে - সেলগুলি কীভাবে চিহ্নিত করা হয় তার কারণে শিরোনামটি কখনও কখনও অদৃশ্য হয়ে যায় এবং আপনি কেন ঘণ্টার জন্য সন্ধান করতে পারবেন যতক্ষণ না আপনি বুঝতে পেরেছেন UITableViewCellযে UITableViewশিরোনামের অন্তর্ভুক্ত নয়।
raven_raven

53

আইওএস .0.০ এবং তারপরে, নতুন dequeueReusableHeaderFooterViewWithIdentifierএপিআই দিয়ে জিনিসগুলি পরিবর্তন হয়েছে ।

আমি একটি গাইড লিখেছি (আইওএস 9 এ পরীক্ষিত), যা সংক্ষেপে এইভাবে সংক্ষেপ করা যেতে পারে:

  1. উপশ্রেণী UITableViewHeaderFooterView
  2. সাবক্লাস ভিউ দিয়ে নিব তৈরি করুন এবং 1 টি ধারক দর্শন যুক্ত করুন যাতে শিরোনাম / পাদলেখের সমস্ত অন্যান্য ভিউ রয়েছে
  3. নিব নিবন্ধন করুন viewDidLoad
  4. শিরোলেখ / পাদলেখ ফিরে পেতে প্রয়োগ করুন viewForHeaderInSectionএবং ব্যবহার করুনdequeueReusableHeaderFooterViewWithIdentifier

2
এই উত্তরের জন্য ধন্যবাদ যা কোনও হ্যাক নয় এবং জিনিসগুলি করার সঠিক উপায়। এছাড়াও, ইউআইটিএবল ভিউহাইডারফুটারভিউতে আমাকে পরিচয় করিয়ে দেওয়ার জন্য ধন্যবাদ। বিটিডব্লিউ, গাইডটি দুর্দান্ত! :)
রোবরিস

স্বাগত. টেবিল বা সংগ্রহ দর্শনের জন্য শিরোলেখ / পাদচরণ প্রয়োগ করা খুব ভাল অ্যাপল দ্বারা নথিভুক্ত নয়। গতকালই আমি স্টোরিবোর্ডের মাধ্যমে ডিজাইন করার সময় দেখানোর জন্য গিটার শিরোনামে আটকে গিয়েছিলাম ।
16:53 এ samwize

1
এটি অবশ্যই শীর্ষের উত্তর হওয়া উচিত!
বেন উইলিয়ামস

এক্সবিয়ের পরিবর্তে স্টোরিবোর্ডের মাধ্যমে কীভাবে এটি করবেন তা আপনি ব্যাখ্যা করতে পারেন? এটি করার সময়, আমি সাফল্যের সাথে প্রাপ্য, তবে আমার ইউআইআইএবেলগুলি বাতিল।
বুঙ্কারডিভ

22

আমি স্টোরিবোর্ডে একটি প্রোটোটাইপ সেল ব্যবহার করে এটি iOS7 এ কাজ করতে পেয়েছি। আমার কাস্টম বিভাগের শিরোনাম দৃশ্যে আমার একটি বোতাম আছে যা স্টোরিবোর্ডে সেটআপ করা একটি সেগটিকে ট্রিগার করে।

টিমের সমাধান দিয়ে শুরু করুন

পেড্রো.এম হিসাবে উল্লেখ করা হয়েছে যে এটির সাথে সমস্যাটি হ'ল বিভাগের শিরোনামটি আলতো চাপলে বিভাগের প্রথম কক্ষটি নির্বাচিত হয়।

পল ভন যেমন উল্লেখ করেছেন, পুরো ঘরের পরিবর্তে ঘরের কনটেন্টভিউটি ফিরিয়ে এটি ঠিক করা হয়েছে।

তবে, অনস হিসাবে উল্লেখ করেছেন, সেকশন শিরোনামটির উপর একটি দীর্ঘ প্রেস অ্যাপ্লিকেশনটি ক্র্যাশ করবে।

সমাধানটি হ'ল কনটেন্টভিউ থেকে যে কোনও অঙ্গভঙ্গি সনাক্তকারীকে সরানো।

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
     static NSString *CellIdentifier = @"SectionHeader";
     UITableViewCell *sectionHeaderView = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

     while (sectionHeaderView.contentView.gestureRecognizers.count) {
         [sectionHeaderView.contentView removeGestureRecognizer:[sectionHeaderView.contentView.gestureRecognizers objectAtIndex:0]];
     }

     return sectionHeaderView.contentView; }

আপনি যদি নিজের বিভাগের শিরোনাম দর্শনগুলিতে অঙ্গভঙ্গিগুলি ব্যবহার করছেন না, তবে এই ছোট্ট হ্যাকটি এটি সম্পন্ন হবে বলে মনে হচ্ছে।


2
তুমি ঠিক বলছো. আমি কেবল এটির ও এর কার্য সম্পাদন করেছি, তাই আমার গবেষণার সময় আমি যে সমস্ত সম্ভাব্য সমাধান পেয়েছি সেগুলি সহ আমার পোস্টটি ( hons82.blogspot.it/2014/05/uitableviewheader-done-right.html ) আপডেট করেছি । এই ফিক্সটির জন্য অনেক অনেক ধন্যবাদ
অন্ডস

ভাল উত্তর ... ধন্যবাদ ম্যান
জোজেন্দ্র.কম

13

আপনি যদি স্টোরিবোর্ডগুলি ব্যবহার করেন তবে আপনি শিরোনাম দর্শন বিন্যাস করতে টেবিলভিউতে একটি প্রোটোটাইপ সেল ব্যবহার করতে পারেন। একটি অনন্য আইডি এবং ভিউফোর্ডহাইডারইনসেকশন সেট করুন আপনি সেই আইডি দিয়ে ঘরটি সনাক্ত করতে পারেন এবং এটি কোনও ইউআইভিউতে কাস্ট করতে পারেন।


12

আপনার যদি এইটির একটি দ্রুত বাস্তবায়ন প্রয়োজন হয় তবে গৃহীত উত্তরের দিকনির্দেশগুলি অনুসরণ করুন এবং তারপরে আপনার মধ্যে ইউআইটিএবলভিউ কনট্রোলার নিম্নলিখিত পদ্ধতিগুলি প্রয়োগ করুন:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return tableView.dequeueReusableCell(withIdentifier: "CustomHeader")
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 75
}

2
কিছু কারণে এটি আমার পক্ষে কাজ করে নি যতক্ষণ না আমি উচ্চতাওহাইডারআইএনএসেকশনকে ওভাররাইড করেছিলাম।
এন্টালপি

এটি বেশ পুরানো কোড। আপনার অন্য উত্তর পোস্ট করা উচিত!
জেজেড

আমি আটকে ছিলাম কারণ আমি জানতাম না যে আমাকে উচ্চতার জন্য হাইডারআইনসেকশন ওভাররাইড করতে হবে। ধন্যবাদ @ এন্টালপি
গুইজব

1
@JZ। আপনার সুইফ্ট 3 উদাহরণে আপনি নীচের স্ব-টেবিলভিউ.ডেকিউরউইজেবল হিজারফুটারভিউ এবং সুইফট 2: ডিফল্টভিউ.ডেক্যুউইউডিউইউ রিজেজেবলসেল উইথআইডেন্টিফায়ার দিয়ে কি পার্থক্য রয়েছে?
শ্রুতিন রাঠোদ

1
এই আমার বাট সংরক্ষণ! শিরোনামে একটি উচ্চতা যুক্ত করা এটি দৃশ্যমান করে।
CRey

9

সমাধানটি আমি নিয়ে এসেছি মূলত স্টোরিবোর্ডগুলির প্রবর্তনের আগে একই সমাধান।

একটি নতুন, খালি ইন্টারফেস ক্লাস ফাইল তৈরি করুন। ক্যানভাসে একটি ইউআইভিউ আঁকুন, পছন্দসই লেআউট।

নিবটি ম্যানুয়ালি লোড করুন, ভিউএইচডারআইএনসেকশন বা ভিউফুটারআইএনসেকশন প্রতিনিধি পদ্ধতিতে যথাযথ শিরোনাম / পাদচরণ বিভাগে নিয়োগ করুন।

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


ওয়েল আপেল করেনি যদি আপনি শিরোলেখে পদ্ধতি হিসাবে :) স্টোরিবোর্ড সেল ব্যবহার করেন stackoverflow.com/questions/9219234/#11396643
Tieme

2
কেবলমাত্র প্রোটোটাইপ সেলগুলির জন্য কাজ করে, স্থিতিশীল কোষ নয়।
জিন-ডেনিস মিউস

1
একটি সত্যিই সহজ সমাধান পিক্সেট ব্যবহার করা হয় ; আপনি শিরোনামের রেফারেন্স না পেয়ে বেশ কাস্টমাইজেশন করতে পারেন। আপনার প্রয়োগ করতে হবে সমস্ত tableView:titleForHeaderInSection, যা একটি ওয়ান লাইনার।
জন স্টার দেওর

5
এটিই আসল সমাধান ... দুর্ভাগ্যক্রমে এটি শীর্ষে নেই, তাই এটি খুঁজে পেতে আমাকে কিছুটা সময় নিয়েছিল। আমি যে সমস্যাগুলি করেছি সেগুলির
অনার্স

এটি এর চেয়ে সহজ, কেবল টেনে আনুন।
রিকার্ডো

5

আপনি যখন কক্ষের সামগ্রীটি দেখবেন তখন আপনার একটি 2 সমস্যা হবে:

  1. অঙ্গভঙ্গি সম্পর্কিত ক্রাশ
  2. আপনি কন্টেন্ট ভিউ পুনরায় ব্যবহার করবেন না (প্রতিবার viewForHeaderInSectionকল এ, আপনি নতুন সেল তৈরি করছেন)

সমাধান:

টেবিল শিরোলেখ \ পাদচরণের জন্য মোড়কের ক্লাস। এটি কেবল ধারক, উত্তরাধিকার সূত্রে প্রাপ্ত UITableViewHeaderFooterView, যা কোষের অভ্যন্তরে ধারণ করে

https://github.com/Magnat12/MGTableViewHeaderWrapperView.git

আপনার ইউআইটিএবলভিউতে ক্লাসটি নিবন্ধ করুন (উদাহরণস্বরূপ, ভিডডিডলয়েডে)

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[MGTableViewHeaderWrapperView class] forHeaderFooterViewReuseIdentifier:@"ProfileEditSectionHeader"];
}

আপনার ইউআইটিএবল ভিউডেলিগেটে:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    MGTableViewHeaderWrapperView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"ProfileEditSectionHeader"];

    // init your custom cell
    ProfileEditSectionTitleTableCell *cell = (ProfileEditSectionTitleTableCell * ) view.cell;
    if (!cell) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"ProfileEditSectionTitleTableCell"];
        view.cell = cell;
    }

    // Do something with your cell

    return view;
}

2

আমি অলসভাবে শিরোনাম / পাদচরণের দৃশ্য তৈরি করতে নিম্নলিখিতগুলি ব্যবহার করতাম:

  • স্টোরিবোর্ডে বিভাগ শিরোনাম / পাদচরণের জন্য একটি ফ্রিফর্ম ভিউ কন্ট্রোলার যুক্ত করুন
  • শিরোনামের জন্য ভিউ কন্ট্রোলারে সমস্ত জিনিস হ্যান্ডেল করুন
  • সারণী দৃশ্যে নিয়ামকটি বিভাগে শিরোনাম / পাদচরণ দ্বারা পুনরায় সজ্জিত দর্শকদের জন্য একটি নিয়ন্ত্রিত দর্শনীয় নিয়ামক সরবরাহ করে [NSNull null]
  • ভিউফোর্ডহাইডারইনসেকশন / ভিউফুটারফুটারআইনসেকশনে যদি ভিউ কন্ট্রোলারটি এখনও উপস্থিত না থাকে তবে স্টোরিবোর্ডগুলি ইনস্ট্যানিয়েটভিউ কনট্রোলারওয়থআইডিটিফায়ার দিয়ে এটি তৈরি করুন, অ্যারেতে এটি মনে রাখবেন এবং ভিউ কন্ট্রোলারদের দৃশ্যে ফিরে আসুন

2

এমন পরিস্থিতিতে আমি সমস্যায় পড়েছি যেখানে সমস্ত যথাযথ পদক্ষেপ না নিয়ে এমনকি শিরোনামের পুনরায় ব্যবহার করা হয়নি।

সুতরাং খালি বিভাগগুলি (0 টি সারি) দেখানোর পরিস্থিতিটি পেতে চান এমন প্রত্যেককে একটি টিপ নোট হিসাবে সতর্ক করুন:

আপনি কমপক্ষে একটি সারি ফিরে না আসা পর্যন্ত DequeueReusableHeaderFooterViewWithIdentifier শিরোনামটি পুনরায় ব্যবহার করবে না

আশা করি এটা সাহায্য করবে


1

দামনের পরামর্শ অনুসরণ করতে , আমি এখানে প্রকাশের সূচক সহ একটি সাধারণ সারিটির মতো শিরোনামকে কীভাবে নির্বাচনযোগ্য করে তুলেছি তা এখানে।

আমি ইউআইবাটন (উপক্লাসের নাম "বাটনউইথআরগমেন্ট") থেকে শিরোনামের প্রোটোটাইপ ঘরে যুক্ত একটি বোতাম যুক্ত করেছি এবং শিরোনাম পাঠ্য মুছিয়া ফেলেছি (গা the় "শিরোনাম" পাঠ্যটি প্রোটোটাইপ সেলে অন্য একটি ইউআইএলবেল)

ইন্টারফেস নির্মাতা বোতাম

তারপরে বোতামটি পুরো শিরোনাম দর্শনে সেট করুন এবং অ্যাভারিওর কৌতুক সহ একটি প্রকাশের সূচক যুক্ত করলেন

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    static NSString *CellIdentifier = @"PersonGroupHeader";
    UITableViewCell *headerView = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(headerView == nil)
    {
        [NSException raise:@"headerView == nil, PersonGroupTableViewController" format:[NSString stringWithFormat:@"Storyboard does not have prototype cell with identifier %@",CellIdentifier]];
    }

    //  https://stackoverflow.com/a/24044628/3075839
    while(headerView.contentView.gestureRecognizers.count)
    {
        [headerView.contentView removeGestureRecognizer:[headerView.contentView.gestureRecognizers objectAtIndex:0]];
    }


    ButtonWithArgument *button = (ButtonWithArgument *)[headerView viewWithTag:4];
    button.frame = headerView.bounds; // set tap area to entire header view
    button.argument = [[NSNumber alloc] initWithInteger:section]; // from ButtonWithArguments subclass
    [button addTarget:self action:@selector(headerViewTap:) forControlEvents:UIControlEventTouchUpInside];

    // https://stackoverflow.com/a/20821178/3075839
    UITableViewCell *disclosure = [[UITableViewCell alloc] init];
    disclosure.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    disclosure.userInteractionEnabled = NO;
    disclosure.frame = CGRectMake(button.bounds.origin.x + button.bounds.size.width - 20 - 5, // disclosure 20 px wide, right margin 5 px
          (button.bounds.size.height - 20) / 2,
          20,
          20);
    [button addSubview:disclosure];

    // configure header title text

    return headerView.contentView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 35.0f;
}

-(void) headerViewTap:(UIGestureRecognizer *)gestureRecognizer;
{
    NSLog(@"header tap");
    NSInteger section = ((NSNumber *)sender.argument).integerValue;
    // do something here
}

ButtonWithArgument.h

#import <UIKit/UIKit.h>

@interface ButtonWithArgument : UIButton
@property (nonatomic, strong) NSObject *argument;
@end

ButtonWithArgument.m

#import "ButtonWithArgument.h"
@implementation ButtonWithArgument
@end

1

আপনার বেসের সমাধানটি বেস হিসাবে ব্যবহার করা উচিত তবে viewWithTag:অন্যান্য শৃঙ্খলাবদ্ধ পদ্ধতির কথা ভুলে যাবেন না , পরিবর্তে আপনার শিরোনামটি পুনরায় লোড করার চেষ্টা করুন (সেই বিভাগটি পুনরায় লোড করে)।

সুতরাং আপনি সমস্ত অভিনব AutoLayoutজিনিসগুলির সাথে আপনার কাস্টম সেল-শিরোলেখ দৃশ্যটি বসার পরে এটি সন্ধান করুন এবং আপনার সেট আপের পরে সামগ্রীটি দেখুন ফিরে করুন, যেমন:

-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
 static NSString *CellIdentifier = @"SectionHeader"; 

    SettingsTableViewCell *sectionHeaderCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    sectionHeaderCell.myPrettyLabel.text = @"Greetings";
    sectionHeaderCell.contentView.backgroundColor = [UIColor whiteColor]; // don't leave this transparent

    return sectionHeaderCell.contentView;
}  

1

শিরোনামটি ভিউ অ্যারের ভিত্তিতে যেখানে সমাধান রয়েছে সে সম্পর্কে কী হবে:

class myViewController: UIViewController {
    var header: [UILabel] = myStringArray.map { (thisTitle: String) -> UILabel in
        let headerView = UILabel()
            headerView.text = thisTitle
    return(headerView)
}

প্রতিনিধি পরবর্তী:

extension myViewController: UITableViewDelegate {
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return(header[section])
    }
}

1
  1. সেল যুক্ত করুন StoryBoardএবং সেট করুনreuseidentified

    SB

  2. কোড

    class TP_TaskViewTableViewSectionHeader: UITableViewCell{
    }
    

    এবং

    লিংক

  3. ব্যবহার করুন:

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let header = tableView.dequeueReusableCell(withIdentifier: "header", for: IndexPath.init(row: 0, section: section))
        return header
    }
    

2
শিরোনাম যোগ করার এটি সঠিক উপায় নয়
মণীশ মালভিয়া

2
তাহলে উপায় কি?
প্রমোদ শুক্ল

1

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

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = tableView.dequeueReusableCell(withIdentifier: "DataCell") as! DataCell
    cell.data1Label.text = "DATA KEY"
    cell.data2Label.text = "DATA VALUE"
    return cell
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 75
}

// Example of regular data cell dataDelegate to round out the example
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DataCell", for: indexPath) as! PlayerCell

    cell.data1Label.text = "\(dataList[indexPath.row].key)"
    cell.data2Label.text = "\(dataList[indexPath.row].value)"
    return cell
}

0

এখানে @Vitaliy Gozhenko এর উত্তর সুইফট মধ্যে।
সংক্ষিপ্তসার হিসাবে আপনি একটি UITableViewHeaderFooterView তৈরি করবেন যা একটি UITableViewCell রয়েছে। এই ইউআইটিএবলভিউসেলটি "প্রসন্নযোগ্য" হবে এবং আপনি এটি আপনার স্টোরিবোর্ডে ডিজাইন করতে পারেন।

  1. একটি ইউআইটিএবল ভিউহাইডারফুটারভিউ ক্লাস তৈরি করুন

    class CustomHeaderFooterView: UITableViewHeaderFooterView {
    var cell : UITableViewCell? {
        willSet {
            cell?.removeFromSuperview()
        }
        didSet {
            if let cell = cell {
                cell.frame = self.bounds
                cell.autoresizingMask = [UIViewAutoresizing.FlexibleHeight, UIViewAutoresizing.FlexibleWidth]
                self.contentView.backgroundColor = UIColor .clearColor()
                self.contentView .addSubview(cell)
            }
        }
    }
    
  2. আপনার ভিউডিডলড ফাংশনে এই শ্রেণীর সাথে আপনার টেবিলভিউটি প্লাগ করুন:

    self.tableView.registerClass(CustomHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "SECTION_ID")
    
  3. বিভাগের শিরোনামের জন্য জিজ্ঞাসা করার সময়, কাস্টমহাইডারফুটারভিউ সনাক্ত করুন এবং এতে একটি ঘর সন্নিবেশ করুন

    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = self.tableView.dequeueReusableHeaderFooterViewWithIdentifier("SECTION_ID") as! CustomHeaderFooterView
        if view.cell == nil {
            let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell")
            view.cell = cell;
        }
    
        // Fill the cell with data here
    
        return view;
    }
    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.