আইওএস ইউআইটিএবলভিউ হেডারভিউ যুক্ত করা হচ্ছে (বিভাগ শিরোনাম নয়)


167

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

ঠিক ঠিক এর মতো - টেবিলের উপরে একটি চিত্রের পাশে একটি লেবেল।

আমি চাই সমস্ত দৃষ্টিভঙ্গি স্ক্রোলযোগ্য হোক যাতে আমি সেগুলি টেবিলের বাইরে রাখতে পারি না।

আমি এটা কিভাবে করবো?

উত্তর:


245

UITableViewএকটি tableHeaderViewসম্পত্তি আছে। আপনি যেদিকে চান সেখানে সেট করুন।

একটি নতুন UIViewধারক হিসাবে একটি নতুন ব্যবহার করুন, একটি নতুন পাঠ্য লেবেল এবং একটি চিত্র দেখুনUIView , তারপরে tableHeaderViewনতুন দৃশ্যে সেট করুন ।

উদাহরণস্বরূপ, একটিতে UITableViewController:

-(void)viewDidLoad
{
     // ...
     UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:imageView];
     UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:labelView];
     self.tableView.tableHeaderView = headerView;
     [imageView release];
     [labelView release];
     [headerView release];
     // ...
} 

গ্রেট! ধন্যবাদ এটি কাজ করছে। ভিতরে টেক্সটভিউ সেলগুলি বড় আকারের বাড়ানোর কোনও সম্পত্তি আছে কি?
আসফ বি

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

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

ভিউডিডলড পর্যায়ে দেখার জ্যামিতিটি সেট করা কি ভাল অনুশীলন?
নন্দীশ এ

1
ঠিক আছে যদি আপনি টেবিল উত্সে শিরোনাম দৃশ্যটি সেট করে কাজ করে বলে মনে হয় তবে উচ্চতাও নির্ধারণ করে নিন: উদাহরণস্বরূপ:public override UIView GetViewForHeader(UITableView tableView, nint section) { return headerView; } public override nfloat GetHeightForHeader(UITableView tableView, nint section) { return headerView.Frame.Height; }
প্যান্থোর 314

193

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


12
আমি এই উত্তরটি পছন্দ করি যেহেতু কোডটি যখন আমি খুব সুন্দরভাবে সেট আপ করতে এবং
আইবিতে

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

2
: উল্লেখ মূল্য কিভাবে এটি এখন স্টোরিবোর্ড সম্পাদক কাজ করে stackoverflow.com/q/7841167/926907
দিমিত্রি Zaytsev

এই জন্য একটি নিব ব্যবহার করবেন না। লোড করতে বেশি সময় নেয়। কোড এ লিখুন। পুনঃব্যবহারযোগ্যতার জন্য একটি কাস্টম শ্রেণি তৈরি করুন এবং তাত্ক্ষণিক ...
চার্লস রবার্টসন

1
এটি আমাকে শিরোনাম দর্শনে উচ্চতার সীমাবদ্ধতা যোগ করতে দেবে না।
ইয়ান ওয়ারবার্টন

14

ইন সুইফট :

override func viewDidLoad() {
    super.viewDidLoad()

    // We set the table view header.
    let cellTableViewHeader = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewHeaderCustomCellIdentifier) as! UITableViewCell
    cellTableViewHeader.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewHeaderCustomCellIdentifier]!)
    self.tableView.tableHeaderView = cellTableViewHeader

    // We set the table view footer, just know that it will also remove extra cells from tableview.
    let cellTableViewFooter = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewFooterCustomCellIdentifier) as! UITableViewCell
    cellTableViewFooter.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewFooterCustomCellIdentifier]!)
    self.tableView.tableFooterView = cellTableViewFooter
}

আইওএস 7 বা ততোধিকের জন্য এই পদ্ধতির ব্যবহারটি রানটাইম সতর্কবার্তাটিকে ট্রিগার করবে: "টেবিল সেলটির পুনরায় ব্যবহারের জন্য কোনও সূচী পথ নয়"। এই ত্রুটিটি এড়াতে, রেফারেন্স লিংক

11

আপনি কেবল ইন্টারফেস বিল্ডারে কেবল একটি ইউআইভিউ তৈরি করতে এবং চিত্রকল্প এবং ইউআইএলবেলটিকে এটিকে আপনার পছন্দসই শিরোনামের মতো দেখানোর জন্য টেনে আনুন এবং এটিকে ব্যবহার করতে পারেন।

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

উদাহরণস্বরূপ, আমার আমার টেবিল শিরোনামের জন্য একটি কাস্টম ইউআইভিউ রয়েছে। ভিউটি "কাস্টমহিডারভিউ" নামে পরিচিত একটি এক্সিব ফাইল দ্বারা পরিচালিত হয় এবং এটি আমার ইউআইটিএবলভিউ কনট্রোলার সাবক্লাসে নিম্নলিখিত কোডটি ব্যবহার করে টেবিল শিরোনামে লোড করা হয়:

-(UIView *) customHeaderView {
    if (!customHeaderView) {
        [[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil];
    }

    return customHeaderView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the CustomerHeaderView as the tables header view 
    self.tableView.tableHeaderView = self.customHeaderView;
}

-36
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)];
    headerView.backgroundColor=[[UIColor redColor]colorWithAlphaComponent:0.5f];
    headerView.layer.borderColor=[UIColor blackColor].CGColor;
    headerView.layer.borderWidth=1.0f;

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5,100,20)];

    headerLabel.textAlignment = NSTextAlignmentRight;
    headerLabel.text = @"LeadCode ";
    //headerLabel.textColor=[UIColor whiteColor];
    headerLabel.backgroundColor = [UIColor clearColor];


    [headerView addSubview:headerLabel];

    UILabel *headerLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)];

    headerLabel1.textAlignment = NSTextAlignmentRight;
    headerLabel1.text = @"LeadName";
    headerLabel.textColor=[UIColor whiteColor];
    headerLabel1.backgroundColor = [UIColor clearColor];

    [headerView addSubview:headerLabel1];

    return headerView;

}

আপনার প্রশ্ন বুঝতে পারলেন না?
প্রিয়ম

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