নির্দিষ্ট বিভাগ শিরোনাম সহ ইউআইটিএবলভিউ


106

অভিবাদন, আমি পড়ছি যে ডিফল্ট আচরণটি UITableViewহ'ল বিভাগের শিরোনাম সারিগুলিকে টেবিলের শীর্ষে পিন করা যতক্ষণ আপনি বিভাগগুলি স্ক্রোল করবেন না যতক্ষণ না পরবর্তী বিভাগটি প্রিভিওস বিভাগের সারিটি দৃষ্টিতে ঠেলে না দেয়।

আমার UITableViewভিতরে একটি আছে UIViewControllerএবং এটি মনে হয় না।

এটি কি কেবল দ্বৈত আচরণের জন্য UITableViewController?

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

    @interface MyUIViewController ()<UITableViewDelegate, UITableViewDataSource>
        @property (nonatomic, readonly) UITableView *myTableView;
        @property (nonatomic, readonly) MyCustomHelperDataSource *helperDataSource;
    @end

    //when section data is set, get details for each section and reload table on success
    - (void)setSectionData:(NSArray *)sections {
        super.sectionData = sections; //this array drives the sections

        //get additional data for section details
        [[RestKitService sharedClient] getSectionDetailsForSection:someId 
        success:^(RKObjectRequestOperation *operation, RKMappingResult *details) {
            NSLog(@"Got section details data");
            _helperDataSource = [[MyCustomHelperDataSource alloc] initWithSections:sections andDetails:details.array];
            [myTableView reloadData];
        } failure:^(RKObjectRequestOperation *operation, NSError *error) {
            NSLog(@"Failed getting section details");
        }];
    }

    #pragma mark <UITableViewDataSource, UITableViewDelegate>

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        if (!_helperDataSource) return 0;
        return [_helperDataSource countSectionsWithDetails]; //number of section that have details rows, ignore any empty sections
    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        //get the section object for the current section int
        SectionObject *section = [_helperDataSource sectionObjectForSection:section];
        //return the number of details rows for the section object at this section
        return [_helperDataSource countOfSectionDetails:section.sectionId];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        UITableViewCell * cell;

        NSString *CellIdentifier = @"SectionDetailCell";

        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
            cell.textLabel.font = [UIFont systemFontOfSize:12.0f];
        }

        //get the detail object for this section
        SectionObject *section = [_helperDataSource sectionObjectForSection:indexPath.section]; 

        NSArray* detailsForSection = [_helperDataSource detailsForSection:section.sectionId] ;
        SectionDetail *sd = (SectionDetail*)[detailsForSection objectAtIndex:indexPath.row];

        cell.textLabel.text = sd.displayText;
        cell.detailTextLabel.text = sd.subText;
        cell.detailTextLabel.textColor = [UIColor blueTextColor];

        return cell;
    }

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 50.0f;
}

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

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger) section {
    //get the section object for the current section
    SectionObject *section = [_helperDataSource sectionObjectForSection:section]; 

    NSString *title = @"%@ (%d)";

    return [NSString stringWithFormat:title, section.name, [_helperDataSource countOfSectionDetails:section.sectionId]];
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 260, 0)];
    header.autoresizingMask = UIViewAutoresizingFlexibleWidth;

    header.backgroundColor = [UIColor darkBackgroundColor];

    SSLabel *label = [[SSLabel alloc] initWithFrame:CGRectMake(3, 3, 260, 24)];
    label.font = [UIFont boldSystemFontOfSize:10.0f];
    label.verticalTextAlignment = SSLabelVerticalTextAlignmentMiddle;
    label.backgroundColor = [UIColor clearColor];
    label.text = [self tableView:tableView titleForHeaderInSection:section];
    label.textColor = [UIColor whiteColor];
    label.shadowColor = [UIColor darkGrayColor];
    label.shadowOffset = CGSizeMake(1.0, 1.0);
    [header addSubview:label];

    return header;
}

এটা কাজ করা উচিত। কিছু কোড দেখান।
ম্যাথিয়াস বাউচ

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

@ এরিক শিরোনামগুলি সারিগুলির সাথে স্ক্রোল করছে। আমি স্ক্রোল করার সময় তারা টেবিলের শীর্ষে থামছে না। আমি আমার টেবিলের ভিউ তৈরি করতে কোডটি ব্যবহার করছি। এটি কোনও ইউআইভিউকন্ট্রোলারের ভিতরে একটি ইউআইটিএবলভিউ।
topwik

উত্তর:


304

শিরোনামগুলি কেবল তখনই স্থির থাকে যখন UITableViewStyleসারণীর সম্পত্তি সেট করা থাকে UITableViewStylePlain। আপনার যদি এটি সেট করা থাকে UITableViewStyleGrouped, শিরোনামগুলি ঘরগুলি দিয়ে স্ক্রোল করবে।


3
আমার টেবিলভিউ শৈলীটি ইউআইটিএবলভিউ স্টাইলপ্লেইন, তবে এটি কোষগুলির সাথে স্ক্রোলও হয়।
yudun1989

8
এর জন্য বেশ কয়েকটি সম্ভাব্য ব্যাখ্যা রয়েছে। একটি গুরুত্বপূর্ণ নোট হ'ল শিরোনামগুলি কেবলমাত্র তার বিভাগের মধ্যে থাকা কক্ষের জন্য স্থির থাকবে। সুতরাং, যদি আপনার বিভাগ 0 তে শিরোনাম রয়েছে, তবে এটি বিভাগ 1 এর কক্ষগুলির জন্য স্থির থাকবে না Another আরেকটি সম্ভাব্য ব্যাখ্যা হ'ল আপনি যথাযথ স্টাইল দিয়ে আপনার ইউআইটিএবলভিউ সূচনা করছেন না। initWithStyle:UITableViewStylePlainটেবিল ভিউ.স্টাইল = ইউআইটিএবলভিউ স্টাইলপ্ল্লেইনের মতো কিছু কল করার ফলে আপনি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।
বচনক

UITableViewStyleGrouped শিরোনাম / পাদচরণকে অন্যান্য কক্ষগুলির সাথে স্থির করে তোলে, যখন UITableViewStylePlain শিরোনাম / পাদচরণকে "ভাসা" করে তোলে যখন শিরোনাম / পাদচরণ টেবিলভিউয়ের শীর্ষে / নীচে পৌঁছায়।
স্টোনল্যাম

@ বাচনক আমি একটি প্রসারযোগ্য শিরোলেখের দৃশ্য ব্যবহার করছি। এবং আমার স্টাইলটি ইউআইটিএবল ভিউ স্টাইলগ্রুপযুক্ত। স্ক্রোলিংয়ের সময় আমি শিরোনামটি ঠিক করতে চাই। যদি আমি এটি ইউআইটিএবলভিউ স্টাইলপ্লেইন করি তবে শিরোনামটি স্ক্রিনের মাঝখানে স্থির হয়ে উঠছে, আমি শিরোনামটি নীচে স্ক্রোল করতে চাই, তবে যখন স্ক্রোলিং করা হচ্ছে তখন আমি এটি প্রথম সারিতে ঠিক করতে চাই .. এটি কি সম্ভব?
গরিব বিকাশকারী

2

আপনার টেবিল ভিউ স্টাইলটি পরিবর্তন করুন:

self.tableview = [[UITableView বরাদ্দ] initwithFrame: ফ্রেম শৈলী: UITableViewStyleGrouped];

ইউআইটিবেল ভিউয়ের জন্য অ্যাপল ডকুমেন্টেশন অনুসারে:

UITableViewStylePlain- একটি সরল সারণী দর্শন। যে কোনও বিভাগের শিরোনাম বা পাদচরণগুলি ইনলাইন বিভাজক হিসাবে প্রদর্শিত হবে এবং টেবিলের দৃশ্যটি স্ক্রোল করার সময় ভাসমান।

UITableViewStyleGrouped- একটি সারণী দর্শন যার বিভাগগুলি সারিগুলির পৃথক গোষ্ঠী উপস্থাপন করে। বিভাগের শিরোনাম এবং পাদচরণগুলি ভাসমান নয়।

আশা করি এই ছোট্ট পরিবর্তন আপনাকে সাহায্য করবে ..


2
এটি প্রশ্নের অনুরোধের ঠিক বিপরীত বলে মনে হচ্ছে - এটি হওয়া উচিত Plain, নাGrouped
কাপাউনটাই

1

সুইফট 3.0

একটি তৈরি করুন ViewController সঙ্গে UITableViewDelegate এবং UITableViewDataSource প্রোটোকল। তারপরে তার স্টাইলটিকে ইউআইটিএবলভিউ স্টাইল . grouped হিসাবে ঘোষণা করে এর ভিতরে একটি টেবিলভিউ তৈরি করুন । এটি শিরোনামগুলি ঠিক করবে।

lazy var tableView: UITableView = {
    let view = UITableView(frame: UIScreen.main.bounds, style: UITableViewStyle.grouped)
    view.delegate = self
    view.dataSource = self
    view.separatorStyle = .none
    return view
}()

0

আপনি টেবিলভিউয়ের বাউন্স সম্পত্তিটিও সংখ্যায় সেট করতে পারেন। এটি বিভাগের শিরোনামগুলি অ-ভাসমান / স্থির রাখবে, তবে তারপরে আপনি টেবিলভিউয়ের বাউন্স সম্পত্তিও হারাবেন।


0

ইউআইটিএবলভি বিভাগগুলি শিরোনামটি স্টিকি বা স্টিকি নয়:

  1. টেবিল দৃশ্যের স্টাইল পরিবর্তন করুন - এটি স্টিকি নয় বলে গোষ্ঠীভুক্ত করুন এবং স্টিকি বিভাগের শিরোনামগুলির জন্য এটি সহজ করুন - ভুলে যাবেন না: আপনি কোড না লিখে স্টোরিবোর্ড থেকে এটি করতে পারেন। (আপনার টেবিল ভিউতে ক্লিক করুন এবং এটি ডান পাশের / উপাদান মেনু থেকে স্টাইলের পরিবর্তন করুন)

  2. আপনার যদি অতিরিক্ত উপাদান যেমন কাস্টম ভিউ বা ইত্যাদি থাকে তবে যথাযথ নকশা তৈরি করতে দয়া করে টেবিল ভিউয়ের মার্জিনটি পরীক্ষা করুন। (যেমন বিভাগের জন্য শিরোনামের উচ্চতা এবং সূচক পথে সেলের উচ্চতা, বিভাগগুলি)


-2

এখন আপনার টেবিলভিউটি সরল টেবিল শৈলীর মতো দেখাচ্ছে তবে বুজে সেটিং টেবিল স্টাইলটি গোষ্ঠীতে সেট করবেন না।

[_tableView setBackgroundView:nil];
_tableView.backgroundColor = [UIColor whiteColor];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.