যদি কোনও টেবিল দেখার ফলাফল না হয় তবে স্ক্রিনে "ফলাফল নয়" প্রদর্শন করুন


114

আমার একটি রয়েছে tableview, যেখানে কখনও কখনও কোনও ফলাফলের তালিকাবদ্ধ নাও হতে পারে, তাই আমি এমন কিছু উপস্থাপন করতে চাই যে কোনও ফলাফল না থাকলে "ফলাফল নেই" বলে থাকে (হয় কোনও লেবেল বা একটি টেবিল ভিউ সেল?)

এটি করার কোন সহজ উপায় আছে?

আমি ফলাফলের উপর ভিত্তি করে দুটিয়ের মধ্যে একটি আড়াল labelকরার পেছনে একটি চেষ্টা করব tableview, তবে যেহেতু আমি TableViewControllerএকটি সাধারণের সাথে কাজ ViewControllerকরছি না আমি নিশ্চিত না যে এটি কতটা স্মার্ট বা করণীয়।

আমি এটি Parseহিসাবে এবং সাবক্লাসিং ব্যবহার করছি PFQueryTableViewController:

@interface TableViewController : PFQueryTableViewController

আমি প্রয়োজনীয় যে কোনও অতিরিক্ত বিশদ সরবরাহ করতে পারি, কেবল আমাকে জানান!

TableViewController স্টোরিবোর্ডে দৃশ্য:

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

সম্পাদনা: মিড মিউন এমপি, আমি যে কোডটি ব্যবহার করছি তা এখানে

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSInteger numOfSections = 0;
    if ([self.stringArray count] > 0)
    {
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        numOfSections                 = 1;
        //yourTableView.backgroundView   = nil;
        self.tableView.backgroundView = nil;
    }
    else
    {
        UILabel *noDataLabel         = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
        noDataLabel.text             = @"No data available";
        noDataLabel.textColor        = [UIColor blackColor];
        noDataLabel.textAlignment    = NSTextAlignmentCenter;
        //yourTableView.backgroundView = noDataLabel;
        //yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        self.tableView.backgroundView = noDataLabel;
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    }

    return numOfSections;
}

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

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


আমি মনে করি লাইনগুলি পরিত্রাণ পেতে কৌশলটি টেবিলভিউতে খালি ফুটারভিউ সেটআপ করা ছিল।
বেন সিনক্লেয়ার

@ অ্যান্ডি এর অর্থ কী?
এসআরএমআর

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

উত্তর:


206

আপনি সহজেই এর backgroundViewসম্পত্তি ব্যবহার করে তা অর্জন করতে পারেন UITableView

উদ্দেশ্য গ:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSInteger numOfSections = 0;
    if (youHaveData)
    {
        yourTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        numOfSections                = 1;
        yourTableView.backgroundView = nil;
    }
    else
    {   
        UILabel *noDataLabel         = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, yourTableView.bounds.size.width, yourTableView.bounds.size.height)];
        noDataLabel.text             = @"No data available";
        noDataLabel.textColor        = [UIColor blackColor];
        noDataLabel.textAlignment    = NSTextAlignmentCenter;
        yourTableView.backgroundView = noDataLabel;
        yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    }

    return numOfSections;
}

সুইফট:

func numberOfSections(in tableView: UITableView) -> Int
{
    var numOfSections: Int = 0
    if youHaveData
    {
        tableView.separatorStyle = .singleLine
        numOfSections            = 1
        tableView.backgroundView = nil
    }
    else
    {
        let noDataLabel: UILabel  = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
        noDataLabel.text          = "No data available"
        noDataLabel.textColor     = UIColor.black
        noDataLabel.textAlignment = .center
        tableView.backgroundView  = noDataLabel
        tableView.separatorStyle  = .none
    }
    return numOfSections
}

রেফারেন্স ইউআইটিএবলভিউ ক্লাস রেফারেন্স

backgroundView সম্পত্তি

সারণী দর্শনটির ব্যাকগ্রাউন্ড ভিউ।

ঘোষণা

দ্রুতগতি

var backgroundView: UIView?

উদ্দেশ্য গ

@property(nonatomic, readwrite, retain) UIView *backgroundView

আলোচনা

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

সারণী প্রদর্শনের পটভূমির রঙ সেট করতে আপনাকে অবশ্যই এই সম্পত্তিটি নির্ধারণ করতে হবে।


উত্তর করার জন্য ধন্যবাদ! এর অর্থ কি আমার কি একটি tableViewআউটলেট দরকার যাতে আমি করতে পারি yourTableView.backgroundView? আমি এটি ব্যবহার করছি TableViewControllerতাই এখনই এর জন্য আমার কোনও আউটলেট নেই, আমি কেন ভাবছি ts
এসআরএমআর

1
UITableViewControllerইতিমধ্যে একটি সম্পত্তি রয়েছে যার tableViewফলে আপনার কোনও তৈরি করার দরকার নেই
সিহান টেক

পেয়েছেন, ব্যবহার করেself.tableView
এসআরএমআর

1
কারেকশন। আরও পরীক্ষার পরে, আমি সেই লাইনটিই তৈরি করতে হয়েছিল আমি উল্লিখিত একই মানটি ফেরত দেওয়ার জন্য। numOfSifications = 1. যদি আমি এটিকে শূন্য করি এবং আমার টেবিলের দৃশ্যটি খালি থাকে তবে এটি কাজ করে, তবে যখন আমি কোনও ঘর তৈরি করি এবং বার্তাটি মোছা ও দেখানোর পরিবর্তে এটি মুছে ফেলি তবে এটি নিম্নলিখিত ত্রুটির সাথে ক্রাশ হয়। *** অপ্রত্যাশিত ব্যতিক্রম 'এনএসআইটার্নাল ইনকনসিসটেন্সি এক্সপেশন' এর কারণে অ্যাপ্লিকেশনটি সমাপ্ত করা হচ্ছে, কারণ: 'ইউআইটিএবলভিউ অভ্যন্তরীণ বাগ: পুরাতন বিভাগের গণনা: 1 এবং নতুন বিভাগ গণনা: 0' সহ একটি নতুন বিভাগ মানচিত্র উত্পন্ন করতে অক্ষম। আমি জানি না কেন একই মূল্য ফেরত দেওয়া কাজ করে তবে এটি কীভাবে তা করা উচিত এবং তা করে।
ChrisOSX

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

107

এক্সকোড 8.3.2 এর জন্য - সুইফট 3.1

এক্সকোড back এ ফিরে যাওয়া একটি খালি টেবিল ভিউতে "কোনও আইটেম নয়" ভিউ যুক্ত করার অর্জনের জন্য এটি একটি অতি-সুপরিচিত তবে অবিশ্বাস্যরকম সহজ উপায় I'll টেবিলের ব্যাকগ্রাউন্ড ভিউতে দেখুন, তবে এখানে প্রবাহ এবং এক্সকোড (8.3.2) স্টোরিবোর্ডটি রয়েছে:

  1. স্টোরিবোর্ডে এমন দৃশ্য নির্বাচন করুন যাতে আপনার টেবিলের দৃশ্য রয়েছে।
  2. সেই দৃশ্যের "দৃশ্য ডক" এ একটি খালি ইউআইভিউ টানুন

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

  1. নতুন দৃশ্যে একটি ইউআইএলবেল এবং কোনও সীমাবদ্ধতা যুক্ত করুন এবং তারপরে সেই দৃশ্যের জন্য একটি আইবিআউটলেট তৈরি করুন

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

  1. সেই দৃশ্যটি টেবিলভিউ.ব্যাকগ্রাউন্ডভিউতে অর্পণ করুন

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

  1. যাদু দেখ!

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

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


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

যেমন @ জিএমোগেমস বলেছে, 2 বছর আইওএস করার পরে টেবিল ভিউগ্রাউন্ড সম্পর্কে এটি প্রথমবারের মতো! ধন্যবাদ মানুষ
আলী আদিল

1
এর জন্য ধন্যবাদ. কেবল এটির বাইরে রাখার জন্য, ব্যাকগ্রাউন্ডভিউটি দেখতে আমাকে টেবিল ভিউ.সেস্পেটর স্টাইল =। না কোনওটি ব্যবহার করতে হয়েছিল এবং ডিফল্ট ইউআইভিউউ রাইজাইজ করতে হয়েছিল। আমি সুইফট 4 এর সাথে এক্সকোড 9.4 ব্যবহার করছি
হামদাদ তারিক

আপনি কীভাবে কাস্টম ভিউ রাখবেন?
নোল 4635

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

30

উপরের কোডের সুইফট সংস্করণ: -

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    var numOfSection: NSInteger = 0

    if CCompanyLogoImage.count > 0 {

        self.tableView.backgroundView = nil
        numOfSection = 1


    } else {

        var noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height))
        noDataLabel.text = "No Data Available"
        noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
        noDataLabel.textAlignment = NSTextAlignment.Center
        self.tableView.backgroundView = noDataLabel

    }
    return numOfSection
}

তবে আপনি যদি কোনও জেএসএন থেকে তথ্য লোড করছেন, আপনার জেএসওএন খালি আছে কিনা তা যাচাই করা দরকার, এরপরে আপনি যদি এই জাতীয় কোড রাখেন তবে এটি প্রাথমিকভাবে "কোনও তথ্য নেই" বার্তাটি দেখায় তবে অদৃশ্য হয়ে যায়। কারণ টেবিলটি পুনরায় লোডের পরে ডেটা বার্তাটি লুকায়। সুতরাং আপনি এই কোডটি রাখতে পারেন যেখানে একটি অ্যারেতে JSON ডেটা লোড করুন। এসও: -

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return 1
}

func extract_json(data:NSData) {


    var error: NSError?

    let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers , error: &error)
    if (error == nil) {
        if let jobs_list = jsonData as? NSArray
        {
            if jobs_list.count == 0 {

                var noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height))
                noDataLabel.text = "No Jobs Available"
                noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
                noDataLabel.textAlignment = NSTextAlignment.Center
                self.tableView.backgroundView = noDataLabel

            }

            for (var i = 0; i < jobs_list.count ; i++ )
            {
                if let jobs_obj = jobs_list[i] as? NSDictionary
                {
                    if let vacancy_title = jobs_obj["VacancyTitle"] as? String
                    {
                        CJobTitle.append(vacancy_title)

                        if let vacancy_job_type = jobs_obj["VacancyJobType"] as? String
                        {
                            CJobType.append(vacancy_job_type)

                            if let company_name = jobs_obj["EmployerCompanyName"] as? String
                            {
                                CCompany.append(company_name)

                                    if let company_logo_url = jobs_obj["EmployerCompanyLogo"] as? String
                                    {
                                        //CCompanyLogo.append("http://google.com" + company_logo_url)

                                        let url = NSURL(string: "http://google.com" + company_logo_url )
                                        let data = NSData(contentsOfURL:url!)
                                        if data != nil {
                                            CCompanyLogoImage.append(UIImage(data: data!)!)
                                        }

                                        if let vacancy_id = jobs_obj["VacancyID"] as? String
                                        {
                                            CVacancyId.append(vacancy_id)

                                        }

                                    }

                            }

                        }
                    }
                }
            }
        }
    }
    do_table_refresh();


}

func do_table_refresh() {

    dispatch_async(dispatch_get_main_queue(), {
        self.tableView.reloadData()
        return
    })
}

সারণিতে কোনও ডেটা না থাকলে লেবেল প্রদর্শনের জন্য এটি খুব ভাল কাজ করে। যাইহোক, ডেটা আসে এবং self.tableView.reloadData()ডাকা হয় যখন পরিচালনা করার সেরা উপায় কি ? আমি দেখতে পেয়েছি যে এটি আমার নতুন সারি যুক্ত করছে, তবে noDataLabelতাদের নীচে এখনও প্রদর্শিত হবে।
tylerSF

1
আপনার যদি অ্যারেতে আইটেমটি থাকে কেবলমাত্র স্ব.ট্যাব.ভিউ.ব্যাকগ্রাউন্ডভিউ = শূন্য
সিলভা

যদি jobs_list.count == 0 {// উপরে বর্ণিত কোড যুক্ত করুন} অন্যথায় {স্ব.ট্যাবলভিউ.ব্যাকগ্রাউন্ডভিউ = নীল}
সিলভা

নিখুঁত। যোগ self.tableView.backgroundView = nilসামনে আমার যদি বিবৃতিতে return jobs_list.count ভাল কাজ করে। ধন্যবাদ
tylerSF

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

6

আপনি এই নিয়ন্ত্রণ চেষ্টা করতে পারেন। এটি বেশ ঝরঝরে। DZNEmptyDataSet

বা আমি যদি আপনি সবাই থাকতাম তবেই আমি করতাম

  • আপনার ডেটা অ্যারে খালি কিনা তা পরীক্ষা করে দেখুন
  • যদি এটি খালি থাকে তবে এটিতে "" কোনও ডেটা নয় "নামক একটি বস্তু যুক্ত করুন
  • সেই স্ট্রিংটি সেল.টেক্সটলবেল.টেক্সটে প্রদর্শন করুন

সহজ কিছু


5

সুইফট 3 (আপডেট করা):

override func numberOfSections(in tableView: UITableView) -> Int {
    if myArray.count > 0 {
        self.tableView.backgroundView = nil
        self.tableView.separatorStyle = .singleLine
        return 1
    }

    let rect = CGRect(x: 0,
                      y: 0,
                      width: self.tableView.bounds.size.width,
                      height: self.tableView.bounds.size.height)
    let noDataLabel: UILabel = UILabel(frame: rect)

    noDataLabel.text = "Custom message."
    noDataLabel.textColor = UIColor.white
    noDataLabel.textAlignment = NSTextAlignment.center
    self.tableView.backgroundView = noDataLabel
    self.tableView.separatorStyle = .none

    return 0
}

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

আমি রাজী. এই সমাধানটি উন্নত করা যেতে পারে, তবে এটি ব্যবহার করা যেতে পারে।
টিওডোর সিউরারু

আপনি কীভাবে একমত হতে পারেন যে আপনার এই সমাধানটি ব্যবহার করা উচিত নয় তবে তারপরেও এটি ব্যবহার করা যেতে পারে? এটি একটি বৈপরীত্য।
rmaddy

আমি সম্মত হই যে এই সমাধানটি উন্নত করা যেতে পারে তবে এর বর্তমান অবস্থায়ও এটি কার্যকর হবে।
টিওডর সিউরারু

5

Swift3.0

আমি আশা করি এটি আপনার উদ্দেশ্যটি সার্ভার করে ...... আপনার ইউআইটিএবলভিউ কনট্রোলারে।

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchController.isActive && searchController.searchBar.text != "" {
        if filteredContacts.count > 0 {
            self.tableView.backgroundView = .none;
            return filteredContacts.count
        } else {
            Helper.EmptyMessage(message: ConstantMap.NO_CONTACT_FOUND, viewController: self)
            return 0
        }
    } else {
        if contacts.count > 0 {
            self.tableView.backgroundView = .none;
            return contacts.count
        } else {
            Helper.EmptyMessage(message: ConstantMap.NO_CONTACT_FOUND, viewController: self)
            return 0
        }
    }
}

ফাংশন সহ সহায়ক শ্রেণি:

 /* Description: This function generate alert dialog for empty message by passing message and
           associated viewcontroller for that function
           - Parameters:
            - message: message that require for  empty alert message
            - viewController: selected viewcontroller at that time
         */
        static func EmptyMessage(message:String, viewController:UITableViewController) {
            let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: viewController.view.bounds.size.width, height: viewController.view.bounds.size.height))
            messageLabel.text = message
            let bubbleColor = UIColor(red: CGFloat(57)/255, green: CGFloat(81)/255, blue: CGFloat(104)/255, alpha :1)

            messageLabel.textColor = bubbleColor
            messageLabel.numberOfLines = 0;
            messageLabel.textAlignment = .center;
            messageLabel.font = UIFont(name: "TrebuchetMS", size: 18)
            messageLabel.sizeToFit()

            viewController.tableView.backgroundView = messageLabel;
            viewController.tableView.separatorStyle = .none;
        }

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

3

আমি মনে করি আপনার সমস্যা সমাধানের জন্য সবচেয়ে মার্জিত উপায় থেকে সুইচিং হয় UITableViewControllerএকটি থেকে UIViewControllerএকটি রয়েছে UITableView। এইভাবে আপনি UIViewপ্রধান দর্শনের সাবভিউ হিসাবে যা খুশি যুক্ত করতে পারেন।

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

আপনি এর মতো কিছু করতে পারেন তবে এটি সেরা সমাধানও নয়।

UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubview: OverlayView];

যে রঙটির চারপাশে বাস্তবায়ন করার জন্য সবচেয়ে মার্জিত উপায়, তার জন্য সবসময়ই একটি ভাল উপায় Thanks আমি ব্যবহার করতে আমার স্টোরিবোর্ড পরিবর্তন চেষ্টা করতে পারে UIViewControllerএকটি ধারণকারী UITableView
এসআরএমআর

1
এটিই সর্বাধিক ভবিষ্যতের প্রুফ। আমি কখনই UITableViewControllerনিজেকে ব্যবহার করি নি, কারণ এটি ব্যবহার করা অন্যভাবে করার চেয়ে সত্যই সহজ নয়, তবুও এটি ভবিষ্যতে জিনিসগুলি পরিবর্তনের আপনার ক্ষমতাকে সীমাবদ্ধ করে।
সিহান টেক

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

3

আপনার numberOfSectionsInTableViewপদ্ধতিতে এই কোডটি ব্যবহার করুন : -

if ([array count]==0
{

    UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, self.view.frame.size.height/2, 300, 60)];                                                                                        
    fromLabel.text =@"No Result";
    fromLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines;
    fromLabel.backgroundColor = [UIColor clearColor];
    fromLabel.textColor = [UIColor lightGrayColor];
    fromLabel.textAlignment = NSTextAlignmentLeft;
    [fromLabel setFont:[UIFont fontWithName:Embrima size:30.0f]];
    [self.view addSubview:fromLabel];
    [self.tblView setHidden:YES];
}

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

2

সুইফট 3

        let noDataLabel: UILabel     = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
        noDataLabel.text             = "No data available"
        noDataLabel.textColor        = UIColor.white
        noDataLabel.font             = UIFont(name: "Open Sans", size: 15)
        noDataLabel.textAlignment    = .center
        tableView.backgroundView = noDataLabel
        tableView.separatorStyle = .none

2

আপনি যদি টেবিলভিউ ফুটার ব্যবহার না করেন এবং টেবিলভিউটি খালি ডিফল্ট টেবিল ঘরগুলি দিয়ে স্ক্রীনটি পূরণ না করতে চান তবে আমি আপনাকে পরামর্শ দেব যে আপনি আপনার টেবিলভিউ ফুটারটি একটি খালি ইউআইভিউতে সেট করুন। আমি ওজে-সি বা সুইফটে এটি করার সঠিক সংশ্লেষটি জানি না তবে Xamarin.iOS এ আমি এটি এইভাবে করব:

public class ViewController : UIViewController
{
    UITableView _table;

    public ViewController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewWillAppear(bool animated) {
        // Initialize table

        _table.TableFooterView = new UIView();
    }
}

উপরের কোডের ফলে খালি ঘরগুলি ছাড়া কোনও টেবিলভিউ তৈরি হবে


2

সমাধানটি আমার পক্ষে কাজ করেছে Here

  1. একটি নতুন ফাইলে নিম্নলিখিত কোড যুক্ত করুন।

  2. স্টোরবোর্ড বা .xib থেকে আপনার টেবিল শ্রেণিকে কাস্টম ক্লাস "মাই টেবিলভিউ" তে পরিবর্তন করুন

(এটি কেবল প্রথম বিভাগের জন্যই কাজ করবে you আপনি যদি আরও কাস্টমাইজ করতে চান তবে মাই টেবিলভিউ পুনরায়লোডডেটা পরিবর্তন করুন) (অন্যান্য ফাংশন অনুসারে ফাংশন)

public class MyTableView: UITableView {

    override public func reloadData() {
        super.reloadData()

        if self.numberOfRows(inSection: 0) == 0 {
            if self.viewWithTag(1111) == nil {
                let noDataLabel = UILabel()
                noDataLabel.textAlignment = .center
                noDataLabel.text = "No Data Available"
                noDataLabel.tag = 1111
                noDataLabel.center = self.center
                self.backgroundView = noDataLabel
            }

        } else {
            if self.viewWithTag(1111) != nil {
                self.backgroundView = nil
            }
        }
    }
}

এটি একটি ভাল পদ্ধতির। এটিকে আরও গোলাকার করার জন্য আমি নিম্নলিখিত হিসাবে কিছু বর্ধন যোগ করেছি। 1. ক্যাশে বিভাজক শৈলী টেবিলভিউ এবং খালি / অ-খালি রাজ্য স্থানান্তরের উপর পুনরুদ্ধার করুন এই সাবক্লাসটি বিভিন্ন ক্ষেত্রে পৃথক পৃথক শৈলীর পছন্দসই ব্যবহারের ক্ষেত্রে প্রযোজ্য। ২. @IBInspectable var emptyStateText: String?এই ক্লাসটি যুক্ত করুন এবং চিহ্নিত করুন হিসাবে @IBDesignableআপনি স্টোরিবোর্ড বা এক্সবিজে বিভিন্ন দৃশ্যের জন্য বিভিন্ন খালি রাজ্যের পাঠ্য পরিবর্তন করতে সক্ষম হবেন। উপভোগ করুন! :)
এজিস্ট লি

1

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


1

আপনি যদি কোনও কোড ছাড়াই এটি করতে চান তবে এটি ব্যবহার করে দেখুন!

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

টেবিলভিউ স্ক্রিনশট

স্টাইলটি "প্লেইন" থেকে "গ্রুপবদ্ধ" করুন।

সারণী দর্শন বৈশিষ্ট্য স্ক্রিনশট -2

এখন আপনি যখন ব্যবহার ....

টেবিলভিউ.ব্যাকগ্রাউন্ডভিউ = আপনার লেবেল বা দৃশ্য অন্তর্ভুক্ত করুন

এতে বিভাজনকারীদের দেখাবে না!


1

এই কোডটি একটি ফাইলে যুক্ত করুন এবং আপনার সংগ্রহের ধরণটি কাস্টমকলেকশনভিউতে পরিবর্তন করুন

import Foundation

class CustomCollectionView: UICollectionView {

  var emptyModel = EmptyMessageModel()
  var emptyView: EmptyMessageView?
  var showEmptyView: Bool = true

  override func reloadData() {
    super.reloadData()

    emptyView?.removeFromSuperview()
    self.backgroundView = nil

    if !showEmptyView {
      return
    }

    if numberOfSections < 1 {
      let rect = CGRect(x: 0,
                        y: 0,
                        width: self.bounds.size.width,
                        height: self.bounds.size.height)

      emptyView = EmptyMessageView()
      emptyView?.frame = rect
      if let emptyView = emptyView {
        //                self.addSubview(emptyView)
        self.backgroundView = emptyView
      }
      emptyView?.setView(with: emptyModel)

    } else {
      emptyView?.removeFromSuperview()
      self.backgroundView = nil
    }
  }
}

class EmptyMessageView: UIView {

  @IBOutlet weak var messageLabel: UILabel!
  @IBOutlet weak var imageView: UIImageView!

  var view: UIView!

  override init(frame: CGRect) {
    super.init(frame: frame)
    xibSetup()
  }

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    xibSetup()
  }

  func xibSetup() {
    view = loadViewFromNib()

    view.frame = bounds

    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    addSubview(view)
  }

  func loadViewFromNib() -> UIView {

    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: "EmptyMessageView", bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

    return view
  }

  func setView(with model: EmptyMessageModel) {
    messageLabel.text = model.message ?? ""
    imageView.image = model.image ?? #imageLiteral(resourceName: "no_notification")
  }
}

///////////
class EmptyMessageModel {
  var message: String?
  var image: UIImage?

  init(message: String = "No data available", image: UIImage = #imageLiteral(resourceName: "no_notification")) {
    self.message = message
    self.image = image
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.