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


308

কেবল কৌতূহলী, কারণ এটি তাত্ক্ষণিকভাবে সম্ভব বলে মনে হচ্ছে না, তবে সাবক্লাসটি UIRefreshControlব্যবহার না করে নতুন আইওএস 6 ক্লাসটি লাভ করার কোনও ছদ্মবেশী উপায় আছে UITableViewControllerকি?

আমি প্রায়শই একটি সংক্ষিপ্তসার UIViewControllerসহ একটি ব্যবহার করি এবং সম্পূর্ণরূপে ব্যবহার না করে তার UITableViewসাথে সামঞ্জস্য করি ।UITableViewDataSourceUITableViewDelegateUITableViewController


6
@ ডেভিডলং: না, ডেভ, তার কী করা উচিত? পরে এই পৃষ্ঠায় আপনি বলছেন যে তার সমাধানটি সমর্থিত নয়, তবে সঠিক সমাধানটি কী?
ম্যাট

3
@matt তিনি একটি ব্যবহার করা উচিত UITableViewControllerএবং ব্যবহার করার জন্য এপিআই অনুরোধ একটি বাগ ফাইল UIRefreshControlএকটি সঙ্গে UITableViewসরাসরি।
ডেভ ডেলং

31
ইউআইটিএবলভিউ কনট্রোলার অনেকগুলি অস্পষ্ট এবং কুলুঙ্গি বাগ এবং অ-তুচ্ছ ভিউ হায়ারারচিগুলির সাথে সমস্যাগুলি পেয়েছিল (যা অবিরত রয়েছে) ... যখন আপনি একটি টেবিলভিউ সাবভিউ সহ একটি স্ট্যান্ডার্ড ভিসি ব্যবহার করতে স্যুইচ করেন তখন সমস্ত ম্যাজিকালি অদৃশ্য হয়ে যায়। আইএমএইচও, "ইউআইটিভিসি ব্যবহার করুন" কোনও সমাধানের একটি দুর্বল সূচনা।
আদম

@ অ্যাডাম চাইল্ড ভিউ কন্ট্রোলার হিসাবে 'ইউআইটিএবলভিউ কনট্রোলার' ব্যবহার করার সময় কি এই বাগগুলি পৃষ্ঠায় উপস্থিত হয় (এইভাবে টেবিল ভিউকন্ট্রোলার শ্রেণিবিন্যাসের উপকার না করে কাস্টমাইজেশন দেখার অ্যাক্সেস দেয়)? এটিকে এভাবে ব্যবহার করার সময় আমি কখনও সমস্যার মুখোমুখি হইনি।

উত্তর:


388

একটি হানচে, এবং ড্রামারবির অনুপ্রেরণার উপর ভিত্তি করে, আমি কেবল UIRefreshControlআমার কাছে একটি সংক্ষিপ্তসার হিসাবে উদাহরণ যোগ করার চেষ্টা করেছি UITableView। এবং এটি ম্যাজিকালি ঠিক কাজ করে!

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.myTableView addSubview:refreshControl];

এটি UIRefreshControlআপনার টেবিল দর্শনের উপরে একটি যুক্ত করে এবং একটি UITableViewController:) ব্যবহার না করে প্রত্যাশার মতো কাজ করে :)


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

UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.myTableView;

self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(getConnections) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;

48
এফওয়াইআই, এটি অসমর্থিত আচরণ এবং ভবিষ্যতে পরিবর্তন হতে পারে। অ্যাপল একমাত্র গ্যারান্টি দেয় যে প্রদত্ত এপিআই অনুসারে এটি ব্যবহার করা (এই ক্ষেত্রে -[UITableViewController setRefreshControl:]) কাজ করা অবিরত থাকবে।
ডেভ দেলং

18
এই প্রয়োগের সাথে, এটি মনে হয় ঠিক ট্রিগার handleRefresh:করার আগেই contentInsetsএকটি বিভক্ত সেকেন্ডের জন্য স্ক্রোল ভিউয়ের মানতে অপ্রত্যাশিত পরিবর্তন রয়েছে । অন্য যে কেউ এটি অনুভব করেন বা এর জন্য কোনও সমাধান আছে? (হ্যাঁ, আমি জানি এটি প্রথম স্থানে অসমর্থিত!)
টিম

6
এর জন্য আপনার কেবল একটি ধারক দর্শন ব্যবহার করা উচিত। আপনার কাস্টম সাবক্লাসের জন্য এর দৃশ্য নিয়ন্ত্রণকারীর শ্রেণিটি সেট করুন UITableViewControllerএবং আপনি "এটি ঠিক করছেন" doing
ইউজিন

3
আইওএস 7-এ (আইওএস 6 এর জন্য অজানা) সম্পাদিত সংস্করণটি আপনি যখন অ্যাপটি বন্ধ এবং পুনরায় চালু করবেন তা বাদ দিয়ে দুর্দান্ত কাজ করে। দ্বিতীয়বার আপনি রিফ্রেশ না হওয়া পর্যন্ত অ্যানিমেশন চলবে না। অ্যাপটি পুনরায় খোলার পরে প্রথমবার সতেজ করে তোলা, আপনি এটি কতটা দূরে টানছেন তার উপর ভিত্তি করে বাড়ানো বৃত্তের পরিবর্তে এটি একটি সম্পূর্ণ বৃত্ত। কিছু ঠিক আছে?
ডেভিড 2391

30
"Slutter" হিসাবে এখনও UITableViewController বাইপাস উপরে উল্লিখিত থাকার এড়ানোর জন্য, ঠিক তাই মত টেবিল ভিউ তলদেশে রিফ্রেশ নিয়ন্ত্রণ যোগ করুন: [_tableView insertSubview:_refreshControl atIndex:0];। আইওএস 7 এবং 8;) উভয়ের সাথে পরীক্ষিত)
ptitvinou

95

তোতলান যে গৃহীত উত্তর দ্বারা ঘটিত হয় নিষ্কাশন করতে, আপনাকে আপনার ধার্য করতে পারেন UITableViewএকটি থেকে UITableViewController

_tableViewController = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain];
[self addChildViewController:_tableViewController];

_tableViewController.refreshControl = [UIRefreshControl new];
[_tableViewController.refreshControl addTarget:self action:@selector(loadStream) forControlEvents:UIControlEventValueChanged];

_theTableView = _tableViewController.tableView;

সম্পাদনা করুন:

টেবিলভিউতে ডেটা রিফ্রেশ করার পরে কোনও অস্থিরতার UIRefreshControlসাথে একটি না UITableViewControllerদিয়ে যুক্ত করার এবং দুর্দান্ত অ্যানিমেশনটি বজায় রাখার একটি উপায় ।

UIRefreshControl *refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.theTableView addSubview:refreshControl];
[self.theTableView sendSubviewToBack:refreshControl];

পরে রিফ্রেশ ডেটা পরিচালনা করার সময় ...

- (void)handleRefresh:(UIRefreshControl *)refreshControl {
    [self.theTableView reloadData];
    [self.theTableView layoutIfNeeded];
    [refreshControl endRefreshing];
}

7
এমনকি আপনাকে নতুন ইউআইটিএবলভিউ তৈরি করতে হবে না। কেবলমাত্র initWithStyle বলুন: বিদ্যমান টেবিলভিউ.স্টাইল - এবং তারপরে newTableViewController.tableView = বিদ্যমান টেবিলভিউ করুন এবং রিফ্রেশকন্ট্রোল বরাদ্দ করুন। এটিকে তিন লাইনে ফুটায়।
ট্রেনস্কো

[_tablewViewController didMoveToParentViewController:self];সাবভিউ যুক্ত করার পরে কল করতে ভুলবেন না ।
কিউস

4
self.tableView = _tableViewController.tableView;হওয়া উচিত_tableViewController.tableView = self.tableView
আলী

@ লিনাস কেন এটি প্রয়োজনীয়? আমি আমার কাস্টম ভিউ কনট্রোলারের ভিউডিডলড পদ্ধতিতে একটি সাবভিউ হিসাবে _tableViewController.view যুক্ত করেছি এবং মনে হয়েছে এটি কৌশলটি করতে পারে। আমার এমনকি _tableViewController.tableView
টাবার

যে কারণে আমি কোনও ইউআইটিএবলভিউ কনট্রোলার ব্যবহার করতে পারি না এবং ইউআইভিউউকন্ট্রোলার ডাব্লু / ভিতরে টেবিল ভিউ ব্যবহার করছি। stackoverflow.com/questions/18900428/...
lostintranslation

21

আপনি যা চেষ্টা করবেন তা হ'ল আপনি যে ভিউকন্ট্রোলার ব্যবহার করছেন তার ভিতরে ধারক ভিউ ব্যবহার করুন। আপনি ডেডিকেটেড টেবিলভিউ সহ পরিষ্কার ইউআইটিএবলভিউ কনট্রোলার সাবক্লাসটি সংজ্ঞায়িত করতে পারেন এবং এটি ভিউকন্ট্রোলারে রেখে দিতে পারেন।


2
স্পষ্টতই, সবচেয়ে পরিষ্কার উপায়টি ইউআইটিএবলভিউ কনট্রোলার প্রকারের চাইল্ড ভিউ নিয়ন্ত্রণকারী যুক্ত করছে adding
Zdenek

তারপরে আপনি ইউআইটিএবল ভিউ কনট্রোলার ব্যবহার করে দখল করতে পারেন self.childViewControllers.firstObject
cbh2000

^ আপনি prepareForSegueকন্টেইনার ভিউতে ইউআইটিএবলভিউ কনট্রোলার অবজেক্টের রেফারেন্স পেতে ব্যবহার করার বিষয়টিও বিবেচনা করতে পারেন কারণ স্টোরিবোর্ড থেকে ইনস্ট্যান্টেশন করার সময় এটি অবিলম্বে একটি সেগু ইভেন্ট হিসাবে ট্রিগার হয়ে গেছে।
ক্রেহ

18

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

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

ODRefreshControl

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

SlimeRefresh

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


1
আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ, তবে ঠিক আমি যা খুঁজছিলাম তা নয়। আপনার পোস্টের প্রথম বাক্যটি অবশ্য আমাকে সমাধান করার জন্য কীভাবে শেষ হয়েছিল তা চেষ্টা করার জন্য অনুপ্রাণিত করেছিল!
কেলার

7
ওডিআরফ্রেসকন্ট্রোল দুর্দান্ত - টিপটির জন্য ধন্যবাদ! খুব সহজ, এবং কাজ করে। এবং অবশ্যই অ্যাপলের চেয়ে অনেক বেশি নমনীয়। আমি কখনই বুঝতে পারি নি যে কেন কেউ ইউআইটিবেবল ভিউ কনট্রোলার, আইএমও পুরো এপিআইয়ের সবচেয়ে খারাপ শ্রেণি ব্যবহার করবে। এটি (পরবর্তী) কিছুই করে না, তবে আপনার দৃষ্টিভঙ্গিকে জটিল করে তুলবে।
n13

এটি আসলে আপনার প্রকল্পের উপর নির্ভর করে আপনি সেখানে কী ব্যবহার করেন .. আমার ক্ষেত্রে একটি ইউটিউবভিউ ব্যবহার করা প্রকল্পের জটিলতা বৃদ্ধি করছিল এবং এখন আমি ইউটিভ্যালিভিউ কনট্রোলারটিতে স্যুইচ করেছি যা আমার কোডকে দুটি বিভাগে বিভক্ত করেছে আমি খুশি আমার 2 টি ছোট ফাইল আছে যা পারে একটি বিশাল ফাইলের পরিবর্তে ডিবাগ করতে ব্যবহৃত হতে হবে ..
কুশ

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

@ জিনলিমোইনান আইওএস সরঞ্জাম এবং গ্রন্থাগারগুলি দ্রুত পরিবর্তন হচ্ছে সুতরাং আমার সম্পর্কে একটি 3 বছরের পুরানো মন্তব্যটি আর বৈধ নয়। আমি স্ন্যাপকিটের সাথে কোডে সমস্ত ব্যবহারকারীর ইন্টারফেস তৈরি করতে শুরু করেছি এবং সত্যই এটি ইন্টারফেস বিল্ডারে 10 হাজার বার ক্লিক করার চেয়ে অত্যন্ত কার্যকর। এছাড়াও একটি ইউআইটিভিউ কনট্রোলারকে একটি ইউআইভিউভিউ কনট্রোলার পরিবর্তন করা সহজ এবং কেবল এক সেকেন্ড সময় নেয়, অন্যদিকে আইবিতে এটি একটি বড় ব্যথা।
n13

7

-endRefreshটেবিলভিউ এর বিষয়বস্তুগুলি এনএসবজেক্ট -performSelector:withObject:afterDelay:বা জিসিডি ব্যবহার করে পুনরায় লোড করার পরে সেকেন্ডের ভগ্নাংশের মাধ্যমে রিফ্রেশকন্ট্রোল পদ্ধতিতে কলটি বিলম্ব করার চেষ্টা করুন dispatch_after

আমি এর জন্য ইউআইআরআইফ্রেশকন্ট্রোল এ একটি বিভাগ তৈরি করেছি:

@implementation UIRefreshControl (Delay)

- (void)endRefreshingAfterDelay:(NSTimeInterval)delay {
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self endRefreshing];
    });
}

@end

আমি এটি পরীক্ষা করেছি এবং এটি সংগ্রহ দর্শনেও কাজ করে। আমি লক্ষ করেছি যে 0.01 সেকেন্ডের মতো ছোট্ট একটি বিলম্ব যথেষ্ট:

// My data refresh process here while the refresh control 'isRefreshing'
[self.tableView reloadData];
[self.refreshControl endRefreshingAfterDelay:.01];

4
বিলম্ব এবং অপেক্ষা সত্যিই খারাপ শৈলী।
orkoden

2
@ করকডেন আমি সম্মত এটি ইতিমধ্যে অসমর্থিত ব্যবহারের জন্য একঝাঁক কাজ UIRefreshControl
বলিভা

আপনি একটি বিলম্ব সহ একটি পদ্ধতি কল করতে পারেন যার সাহায্যে অনেক সহজ। [self performSelector:@selector(endRefreshing) withObject:nil afterDelay:0.01]
orkoden

2
শেষের প্রভাবটি হুবহু একই, এবং 'হ্যাক' আরও / কম মার্জিত করে তোলে না। এর -performSelector:withObject:afterDelay:জন্য জিসিডি ব্যবহার করবেন কিনা তা ব্যক্তিগত স্বাদের বিষয়।
বলিভা

7

আইওএস 10 সুইফট 3.0

ইহা সাধারণ

import UIKit

class ViewControllerA: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var myTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        myTableView.delegate = self
        myTableView.dataSource = self

        if #available(iOS 10.0, *) {
            let refreshControl = UIRefreshControl()
            let title = NSLocalizedString("PullToRefresh", comment: "Pull to refresh")
            refreshControl.attributedTitle = NSAttributedString(string: title)
            refreshControl.addTarget(self,
                                     action: #selector(refreshOptions(sender:)),
                                     for: .valueChanged)
            myTableView.refreshControl = refreshControl
        }
    }

    @objc private func refreshOptions(sender: UIRefreshControl) {
        // Perform actions to refresh the content
        // ...
        // and then dismiss the control
        sender.endRefreshing()
    }

    // MARK: - Table view data source

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 12
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)

        cell.textLabel?.text = "Cell \(String(indexPath.row))"
        return cell
    }

}

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

আপনি যদি আইওএস 10 ইউআইরিফ্রেসকন্ট্রোলটি সম্পর্কে জানতে চান তবে এখানে পড়ুন


3

সাবউভিউ হিসাবে রিফ্রেশ নিয়ন্ত্রণ যুক্ত করা বিভাগ শিরোনামগুলির উপরে একটি খালি স্থান তৈরি করে।

পরিবর্তে, আমি আমার ইউআইভিউউকন্ট্রোলারে একটি ইউআইটিএবলভিউ কনট্রোলার এম্বেড করেছি, তারপরে আমার পরিবর্তন tableView সম্পত্তিটিকে দিকে চিহ্নিত করতে এবং ভায়োলা! নূন্যতম কোড পরিবর্তন। :-)

পদক্ষেপ:

  1. স্টোরিবোর্ডে একটি নতুন ইউআইটিএবলভিউ কনট্রোলার তৈরি করুন এবং এটি আপনার মূল ইউআইভিউ কনট্রোলারটিতে এম্বেড করুন
  2. @IBOutlet weak var tableView: UITableView!নীচে দেখানো হয়েছে এমনভাবে নতুন এম্বেড হওয়া ইউআইটিএবলভিউ কনট্রোলার থেকে একটিকে প্রতিস্থাপন করুন

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tableViewController = self.childViewControllers.first as! UITableViewController
        tableView = tableViewController.tableView
        tableView.dataSource = self
        tableView.delegate = self

        // Now we can (properly) add the refresh control
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: "handleRefresh:", forControlEvents: .ValueChanged)
        tableViewController.refreshControl = refreshControl
    }

    ...
}

2

সুইফট ২.২ এর জন্য।

প্রথমে ইউআইআরআইফ্রেশকন্ট্রোল () তৈরি করুন।

var refreshControl : UIRefreshControl!

আপনার ভিউডিডলড () পদ্ধতিতে যুক্ত করুন:

refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Refreshing..")
    refreshControl.addTarget(self, action: #selector(YourUIViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
    self.tableView.addSubview(refreshControl)

এবং রিফ্রেশ ফাংশন করা

func refresh(refreshControl: UIRefreshControl) {

    // do something ...

    // reload tableView
    self.tableView.reloadData()

    // End refreshing
    refreshControl.endRefreshing()
}

0

এখানে আরেকটি সমাধান যা কিছুটা আলাদা।

আমার কিছু ভিউ হায়ারার্কি সম্পর্কিত সমস্যাগুলির কারণে এটি ব্যবহার করতে হয়েছিল: আমি কিছু কার্যকারিতা তৈরি করেছিলাম যার জন্য ভিউ হায়ারার্কির বিভিন্ন স্থানে ভিউগুলি পাস করার দরকার ছিল, যা ইউআইটিএবলভিউ কনট্রোলারের টেবিলভিউ খ / সি টেবিলভিউটি ইউআইটিএবলভিউ কনট্রোলারের মূল দৃষ্টিভঙ্গি ব্যবহার করার সময় ভেঙে যায় ( স্ব.উভিউ) এবং কেবল একটি নিয়মিত দর্শন নয়, এটি অসঙ্গতি নিয়ামক / দৃশ্যের স্তরক্রম তৈরি করেছে এবং ক্রাশ ঘটায়।

মূলত স্ব-দর্শনকে আলাদা ভিউ বরাদ্দ করার জন্য ইউআইটিএবলভিউ কনট্রোলার এবং ওভাররাইড লোডভিউয়ের নিজস্ব সাবক্লাস তৈরি করুন এবং আলাদা টেবিলভিউ ফেরত টেবিলভিউ সম্পত্তিটি ওভাররাইড করুন।

উদাহরণ স্বরূপ:

@interface MyTableVC : UITableViewController
@end

@interface MyTableVC ()
@property (nonatomic, strong) UITableView *separateTableView;
@end

@implementation MyTableVC

- (void)loadView {
    self.view = [[UIView alloc] initWithFrame:CGRectZero];
}

- (UITableView *)tableView {
    return self.separateTableView;
}

- (void)setTableView:(UITableView *)tableView {
    self.separateTableView = tableView;
}

@end

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

MyTableVC *tableViewController = [[MyTableVC alloc] init];
tableViewController.tableView = self.myTableView;

self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(getConnections) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;

এর জন্য আরও একটি সম্ভাব্য ব্যবহার রয়েছে:

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

কিছু বিষয় লক্ষ্য রাখতে হবে:

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


1
"UITableViewController সাবক্লাস ব্যবহার না করে" প্রশ্নটি নির্দিষ্ট করা হয়েছে এবং এই উত্তরটি কোনও ইউআইটিএবল ভিউকন্ট্রোলার সাবক্লাসের জন্য।
ব্রায়ান

0

এটা চেষ্টা কর,

উপরের সমাধানগুলি ঠিক আছে তবে টেবিলভিউ.রেফ্রেশকন্ট্রোল কেবল ইউআইটিবেলভিউ কনট্রোলারের জন্য আইওএস 9.x অবধি উপলব্ধ এবং আইওএস 10.x থেকে ইউআইটিএবলভিউতে আসে।

সুইফ্ট 3 এ লিখিত -

let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(FeedViewController.loadNewData), for: UIControlEvents.valueChanged)
// Fix for the RefreshControl Not appearing in background
tableView?.addSubview(refreshControl)
tableView.sendSubview(toBack: refreshControl)

এখনও অবধি সেরা সমাধান
কার্তিক কেএম

-1

কেলারের প্রথম পরামর্শটি আইওএস 7-তে একটি অদ্ভুত বাগের কারণ ঘটায় যেখানে ভিউ কন্ট্রোলারটি আবার প্রদর্শিত হওয়ার পরে টেবিলের ইনসেটটি বাড়ানো হয়। দ্বিতীয় উত্তরে পরিবর্তন করা, ইউটিভ্যালিভিউ কনট্রোলার ব্যবহার করে আমার জন্য স্থির জিনিস।


-6

দেখা যাচ্ছে আপনি যখন কোনও ইউআইটিএবলভিউ সাবউভিউ সহ ইউআইভিউউকন্ট্রোলার ব্যবহার করেন এবং ইউআইটিএবলভিডাটা ডেটা সোর্স এবং ইউআইটিএবলভিউডেলিগেটের সাথে সম্মতি রাখেন তখন আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

self.refreshControl = [[UIRefreshControl alloc]init];
[self.refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];

9
একমত নন। self.refreshControlএকটি জন্য সম্পত্তি UITableViewController, না UIViewController
রিক্সার

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