সুইফটে রিফ্রেশ করতে টান কীভাবে ব্যবহার করবেন?


248

আমি সুইফ ব্যবহার করে আরএসএস রিডার তৈরি করছি এবং পুনরায় লোড করার কার্যকারিতাটি কার্যকর করতে হবে।

এখানে এটি করার চেষ্টা করছি।

class FirstViewController: UIViewController,
    UITableViewDelegate, UITableViewDataSource {

   @IBOutlet var refresh: UIScreenEdgePanGestureRecognizer
   @IBOutlet var newsCollect: UITableView

   var activityIndicator:UIActivityIndicatorView? = nil

   override func viewDidLoad() {
       super.viewDidLoad()
       self.newsCollect.scrollEnabled = true
      // Do any additional setup after loading the view, typically from a nib.

      if nCollect.news.count <= 2{
          self.collectNews()
       }
      else{
          self.removeActivityIndicator()
       }
      view.addGestureRecognizer(refresh)
   }



@IBAction func reload(sender: UIScreenEdgePanGestureRecognizer) {
    nCollect.news = News[]()
    return newsCollect.reloadData()
}

আমি পাচ্ছি:

সম্পত্তি 'সেলফ্রেস রিফ্রেশ' সুপার ইনিট কলটিতে আরম্ভ করা হয়নি

অঙ্গভঙ্গি সনাক্তকারীদের আচরণ বুঝতে দয়া করে আমাকে সহায়তা করুন। একটি কাজের নমুনা কোড একটি দুর্দান্ত সহায়তা হবে।

ধন্যবাদ।


আপনি টেবিলভিউতে রিফ্রেশ করতে টানতে চান টেকেরপলিকাল.কম
অনিল ভার্গিজ

হ্যাঁ, আমার কেবল এই কার্যকারিতাটি দরকার তবে আমার কাছে ওবিজির কোনও ক্লু নেই। দ্রুত কার্যকর করতে চান।
xrage

উত্তর:


591

রিফ্রেশ টানুন আইওএস এ নির্মিত। আপনি দ্রুত মত এটি করতে পারে

var refreshControl = UIRefreshControl()

override func viewDidLoad() {
   super.viewDidLoad()

   refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
   refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
   tableView.addSubview(refreshControl) // not required when using UITableViewController
}

@objc func refresh(_ sender: AnyObject) {
   // Code to refresh table view  
}

এক পর্যায়ে আপনি রিফ্রেশ শেষ করতে পারেন।

refreshControl.endRefreshing()

15
ধন্যবাদ! আমি এই ব্যবহার। অলস লোডিংয়ের জন্য কেবল কিছু টুইট করা। আমি করবো: "অলস বর্ণের রিফ্রেশকন্ট্রোল = ইউআইআরআইফ্রেশকন্ট্রোল ()" আমি ভেরিয়েবলের জোর করে মোড়কানো এড়ানো ভাল অনুশীলন বলে মনে করি, কারণ এটি ভাষা সুরক্ষাকে পরাভূত করে বলে মনে হয়।
এনএমডিয়াস

10
কেবলমাত্র একটি দ্রষ্টব্য নোট, আপনাকে এমনকি টেবিল ভিউতে রিফ্রেশকন্ট্রোল যুক্ত করার দরকার নেই। এটি স্পষ্টভাবে পরিচালিত।
কেন্ড্রিক লেদেট

1
আপনি কেন কোনও ইউআইটিএলভিউ কনট্রোলার ব্যবহার না করলেও কেনট্রিকলিডেট?
ভান ডু ট্রান

3
আমি কীভাবে এই সমাধানটি টেবিলভিউয়ের শীর্ষে এবং নীচে ব্যবহার করতে সক্ষম হব?
অস্টিনটি

3
সুইফট 4 আপডেট: রিফ্রেশকন্ট্রোল.এডিডিআরজেট (স্ব, ক্রিয়া: "রিফ্রেশ:", এর জন্য: মূল্যমান বদলানো)
আকসেলি

148

স্টোরিবোর্ড এবং সুইফ্ট সহ একটি সমাধান ...

1.) আপনার। স্টোরবোর্ড ফাইলটি খুলুন, আপনার স্টোরিবোর্ডে একটি টেলভিউকন্ট্রোলার নির্বাচন করুন এবং সারণী দেখুন নিয়ন্ত্রণকারী - ইউটিলিটিগুলিতে রিফ্রেশ বৈশিষ্ট্য।

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

২) সম্পর্কিত UITableViewController- শ্রেণি খুলুন এবং ভিডডিডোড পদ্ধতিতে নিম্নলিখিত লাইনটি যুক্ত করুন।

self.refreshControl?.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)

সুইফ্ট 5.0-এর জন্য সম্পাদিত:

self.refreshControl?.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)

বা সুইফট ২.২ এ:

self.refreshControl?.addTarget(self, action: #selector(TestTableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)

৩) ভিডডিডলড-পদ্ধতির উপরে নিম্নলিখিত পদ্ধতিটি যুক্ত করুন

func refresh(sender:AnyObject)
{
    // Updating your data here...

    self.tableView.reloadData()
    self.refreshControl?.endRefreshing()
}

7
এছাড়াও, আপনি স্টোরিবোর্ডে রিফ্রেশ কন্ট্রোল থেকে
স্ট্যান্ডবোর্ডে

যদি আমার লোডিং ডেটা অ্যাসিক্রোনাস হয় তবে আমি put self.tableView.reloadData()এবং self.refreshControl?.endRefreshing()কলব্যাকের মধ্যে থাকা উচিত ?
কিয়ান চেন

একদম ঠিক! এবং reloadData()তাত্ক্ষণিকভাবে আপনার ইউআইকে রিফ্রেশ করার জন্য মূল কাতারে রাখুন: dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
ফাঁকা

1
কোনও লেআউট বাগ (কমপক্ষে আমার পক্ষে সুইফট 2+ ব্যবহারের জন্য নয়) এর কারণ হিসাবে গ্রহণযোগ্য উত্তরের চেয়ে এই পথে অগ্রাধিকার দেওয়া হয়েছিল
রায়ান ওয়ালটন

1
এই উত্তরের সর্বাধিক ভোট হওয়া উচিত এবং সঠিক উত্তর হওয়া উচিত
ক্রুমেনস

75

আমি একটি প্রিটি কুল বৈশিষ্ট্য উল্লেখ করতে চাই যা আইওএস 10 এর পরে অন্তর্ভুক্ত রয়েছে, যা:

এখনকার জন্য, UIRefreshControl সরাসরি প্রতিটি সমর্থিত UICollectionView, UITableViewএবং UIScrollView!

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

@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()

    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: #selector(doSomething), for: .valueChanged)

    // this is the replacement of implementing: "collectionView.addSubview(refreshControl)"
    collectionView.refreshControl = refreshControl
}

func doSomething(refreshControl: UIRefreshControl) {
    print("Hello World!")

    // somewhere in your code you might need to call:
    refreshControl.endRefreshing()
}

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

তবে, আপনার কাছে এখনও addSubviewআইওএস সংস্করণটির উপর ভিত্তি করে ব্যবহারের বিকল্প রয়েছে :

if #available(iOS 10.0, *) {
  collectionView.refreshControl = refreshControl
} else {
  collectionView.addSubview(refreshControl)
}

আরে মানুষ, আমি ডস কিছুতে কি কল করব? যদি আমি পুনরায় লোড কল করি D ডেটা এটি আবার লোড করতে চায় না!

@JavierV। doSomethingফাংশনে একটি ব্রেকপয়েন্ট যুক্ত করুন , যদি এটি পৌঁছতে পারে তবে আপনার কোডটি পরীক্ষা করে নিতে হবে।
আহমদ এফ

50

সুইফট 4

var refreshControl: UIRefreshControl!

override func viewDidLoad() {
    super.viewDidLoad()

    refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
    tableView.addSubview(refreshControl) 
}

@objc func refresh(_ sender: Any) {
    //  your code to reload tableView
}

এবং আপনি এতে সতেজ হওয়া বন্ধ করতে পারেন:

refreshControl.endRefreshing()

tableView.reloadData()আপনার উদাহরণে উল্লেখ করতে ভুলবেন না !
কনস্টান্টিনোস ন্যাটসিয়োস

হাই আমি যে ভাবে আমার refreshcontrol তৈরি করুন: var refControl: UIRefreshControl{ let rfControl = UIRefreshControl() rfControl.attributedTitle = NSAttributedString(string: "") rfControl.tintColor = UIColor(red:0.16, green:0.68, blue:0.9, alpha:1) rfControl.addTarget(self, action: #selector(getNewMessageList), for: .valueChanged) return rfControl }। তারপরে এন্ড রিফ্রেশিংকে ফোন করুন (), এটি কাজ করে না (রিফ্রেশকন্ট্রোলটি এখনও সেখানে দেখায়), তবে আপনার পথটি অনুসরণ করুন, এটি কাজ করেছে, দয়া করে আমাকে কেন জানান?
লী

@lee কারণ rfControl স্থানীয় এবং বাইরে থেকে কোনও অ্যাক্সেস নেই। ভিসির কাছে বৈশ্বিক চলক হিসাবে rfControl আরম্ভ করার চেষ্টা করুন: var rfControl = UIRefreshControl (), এবং rfControl.endRefreshing ()
গিলাড ব্রুনফম্যান

একটি প্রশ্ন: .valueChangedইভেন্টটি ট্রিগার করা হয় যেখানে ? আমি এই সংযোগটি বুঝতে পারি না।
জুনিয়রগার্সিয়া

ইউআইআরআইফ্রেশকন্ট্রোলটি যখন ট্রিগার হয়, আপনি যখন দেখেন যে আপনি যুক্ত করুন: রিফ্রেশকন্ট্রোল.এডিডিট্রেট (স্ব, ক্রিয়া: # নির্বাচক (সেলফ্রেস রিফ্রেশ)): ইউআইসিএন্ট্রোলএভেন্টস.ভেলুচেন্জড
গিলাড ব্রুনফম্যান

9

ইন সুইফট এই ব্যবহার,

আপনি যদি ওয়েবভিউতে রিফ্রেশ করতে টানতে চান,

সুতরাং এই কোড চেষ্টা করুন:

override func viewDidLoad() {
    super.viewDidLoad()
    addPullToRefreshToWebView()
}

func addPullToRefreshToWebView(){
    var refreshController:UIRefreshControl = UIRefreshControl()

    refreshController.bounds = CGRectMake(0, 50, refreshController.bounds.size.width, refreshController.bounds.size.height) // Change position of refresh view
    refreshController.addTarget(self, action: Selector("refreshWebView:"), forControlEvents: UIControlEvents.ValueChanged)
    refreshController.attributedTitle = NSAttributedString(string: "Pull down to refresh...")
    YourWebView.scrollView.addSubview(refreshController)

}

func refreshWebView(refresh:UIRefreshControl){
    YourWebView.reload()
    refresh.endRefreshing()
}

ধন্যবাদ জনাব! শেখার সময় আমার যে সমস্যা হয়েছে তার কোনও সমস্যার সমাধান করেছেন।
অ্যাড্রিয়ান ডেভিড স্মিথ

5

আনহিলের উত্তর আমাকে অনেক সাহায্য করেছিল।

তবে, আরও পরীক্ষা-নিরীক্ষার পরে আমি লক্ষ্য করেছি যে প্রস্তাবিত সমাধানটি কখনও কখনও ইউআই-এর ত্রুটি - বিচ্যুতি ঘটায় ।

পরিবর্তে, এই পদ্ধতির জন্য যাওয়া * আমার জন্য কৌশলটি করেছিল।

* সুইফট 2.1

//Create an instance of a UITableViewController. This will host your UITableView.
private let tableViewController = UITableViewController()

//Add tableViewController as a childViewController and set its tableView property to your UITableView.
self.addChildViewController(self.tableViewController)
self.tableViewController.tableView = self.tableView
self.refreshControl.addTarget(self, action: "refreshData:", forControlEvents: .ValueChanged)
self.tableViewController.refreshControl = self.refreshControl

2

ত্রুটিটি আপনাকে কী বলছে, তা refreshকি এটি আরম্ভ করা হয়নি। মনে রাখবেন আপনি করতে বেছে নেওয়া হয়েছে refreshঐচ্ছিক না, যা সুইফট মানে যে হয়েছে একটি মান আছে আগে আপনি কল super.init(অথবা এটা পরোক্ষভাবে বলা হচ্ছে, যা আপনার ক্ষেত্রে মনে করা হয়)। হয় optionচ্ছিক করুন refresh(সম্ভবত আপনি যা চান) বা কোনও উপায়ে এটি সূচনা করুন।

আমি আবার সুইফট প্রবর্তনীয় ডকুমেন্টেশন পড়ার পরামর্শ দেব, যা এটি দীর্ঘ দৈর্ঘ্যে coversেকে দেয়।

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


2

আমি একটি আরএসএস ফিড অ্যাপ তৈরি করেছি যাতে আমার রিফ্রেশ করার জন্য একটি পুল আছে বৈশিষ্ট্য রয়েছে যা মূলত উপরে তালিকাভুক্ত কিছু সমস্যা ছিল।

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

উপরে উল্লিখিত যা সঠিক ক্ষেত্রগুলি অন্তর্ভুক্ত করে তবে কিছু সমস্যা রয়েছে যা দিয়ে লোকেরা এখানে রয়েছে আমি এখানে যা করেছি এবং এটি একটি ট্রিট কাজ করে:

আমি @ ব্লানকার্চের যোগাযোগ গ্রহণ করেছি এবং আমার মেইন স্টোরবোর্ডে গিয়ে রিফ্রেশ ব্যবহার করতে টেবিলের দৃশ্যটি নির্বাচন করি, তবে যা উল্লেখ করা হয়নি তা হ'ল রিফ্রেশটি দক্ষতার সাথে ব্যবহার করতে আইবিআউটলেট এবং আইবিএ সারণি তৈরি করা হচ্ছে

//Created from main.storyboard cntrl+drag refresh from left scene to assistant editor
@IBOutlet weak var refreshButton: UIRefreshControl

override func viewDidLoad() {
  ...... 
  ......
  //Include your code
  ......
  ......
  //Is the function called below, make sure to put this in your viewDidLoad 
  //method or not data will be visible when running the app
  getFeedData()
}

//Function the gets my data/parse my data from the web (if you havnt already put this in a similar function)
//remembering it returns nothing, hence return type is "-> Void"
func getFeedData() -> Void{
  .....
  .....
}

//From main.storyboard cntrl+drag to assistant editor and this time create an action instead of outlet and 
//make sure arguments are set to none and note sender
@IBAction func refresh() {
  //getting our data by calling the function which gets our data/parse our data
  getFeedData()

  //note: refreshControl doesnt need to be declared it is already initailized. Got to love xcode
  refreshControl?.endRefreshing()
}

আশা করি এটি আমার মতো পরিস্থিতিতে কাউকে সহায়তা করবে


2
func pullToRefresh(){

    let refresh = UIRefreshControl()
    refresh.addTarget(self, action: #selector(handleTopRefresh(_:)), for: .valueChanged )
    refresh.tintColor = UIColor.appBlack
    self.tblAddressBook.addSubview(refresh)

}
@objc func handleTopRefresh(_ sender:UIRefreshControl){
    self.callAddressBookListApi(isLoaderRequired: false)
    sender.endRefreshing()
}

2

বিস্তারিত

  • এক্সকোড সংস্করণ 10.3 (10 জি 8), সুইফ্ট 5

বৈশিষ্ট্য

  • প্রোগ্রামগতভাবে "টানতে টানুন" তৈরি করার ক্ষমতা
  • ইভেন্টগুলি মাল্টি- "রিফ্রেশ করতে টানুন" থেকে সুরক্ষা
  • যখন নিয়ন্ত্রণ নিয়ন্ত্রক স্যুইচ করা থাকে (যেমন ট্যাবকন্ট্রোলারের ক্ষেত্রে) তখন ক্রিয়াকলাপ সূচকটির অ্যানিমেটিং চালিয়ে যাওয়ার ক্ষমতা Ab

সমাধান

import UIKit

class RefreshControl: UIRefreshControl {

    private weak var actionTarget: AnyObject?
    private var actionSelector: Selector?
    override init() { super.init() }

    convenience init(actionTarget: AnyObject?, actionSelector: Selector) {
        self.init()
        self.actionTarget = actionTarget
        self.actionSelector = actionSelector
        addTarget()
    }

    private func addTarget() {
        guard let actionTarget = actionTarget, let actionSelector = actionSelector else { return }
        addTarget(actionTarget, action: actionSelector, for: .valueChanged)
    }

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

    func endRefreshing(deadline: DispatchTime? = nil) {
        guard let deadline = deadline else { endRefreshing(); return }
        DispatchQueue.global(qos: .default).asyncAfter(deadline: deadline) { [weak self] in
            DispatchQueue.main.async { self?.endRefreshing() }
        }
    }

    func refreshActivityIndicatorView() {
        guard let selector = actionSelector else { return }
        let _isRefreshing = isRefreshing
        removeTarget(actionTarget, action: selector, for: .valueChanged)
        endRefreshing()
        if _isRefreshing { beginRefreshing() }
        addTarget()
    }

    func generateRefreshEvent() {
        beginRefreshing()
        sendActions(for: .valueChanged)
    }
}

public extension UIScrollView {

    private var _refreshControl: RefreshControl? { return refreshControl as? RefreshControl }

    func addRefreshControll(actionTarget: AnyObject?, action: Selector, replaceIfExist: Bool = false) {
        if !replaceIfExist && refreshControl != nil { return }
        refreshControl = RefreshControl(actionTarget: actionTarget, actionSelector: action)
    }

    func scrollToTopAndShowRunningRefreshControl(changeContentOffsetWithAnimation: Bool = false) {
        _refreshControl?.refreshActivityIndicatorView()
        guard   let refreshControl = refreshControl,
                contentOffset.y != -refreshControl.frame.height else { return }
        setContentOffset(CGPoint(x: 0, y: -refreshControl.frame.height), animated: changeContentOffsetWithAnimation)
    }

    private var canStartRefreshing: Bool {
        guard let refreshControl = refreshControl, !refreshControl.isRefreshing else { return false }
        return true
    }

    func startRefreshing() {
        guard canStartRefreshing else { return }
        _refreshControl?.generateRefreshEvent()
    }

    func pullAndRefresh() {
        guard canStartRefreshing else { return }
        scrollToTopAndShowRunningRefreshControl(changeContentOffsetWithAnimation: true)
        _refreshControl?.generateRefreshEvent()
    }

    func endRefreshing(deadline: DispatchTime? = nil) { _refreshControl?.endRefreshing(deadline: deadline) }
}

ব্যবহার

// Add refresh control to UICollectionView / UITableView / UIScrollView
private func setupTableView() {
    let tableView = UITableView()
    // ...
    tableView.addRefreshControll(actionTarget: self, action: #selector(refreshData))
}

@objc func refreshData(_ refreshControl: UIRefreshControl) {
    tableView?.endRefreshing(deadline: .now() + .seconds(3))
}

// Stop refreshing in UICollectionView / UITableView / UIScrollView
tableView.endRefreshing()

// Simulate pull to refresh in UICollectionView / UITableView / UIScrollView
tableView.pullAndRefresh()

সম্পূর্ণ নমুনা

সমাধান কোডটি এখানে যুক্ত করতে ভুলবেন না

import UIKit

class ViewController: UIViewController {

    private weak var tableView: UITableView?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupTableView()
    }

    private func setupTableView() {
        let tableView = UITableView()
        view.addSubview(tableView)
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        tableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        tableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        tableView.dataSource = self
        tableView.delegate = self
        tableView.addRefreshControll(actionTarget: self, action: #selector(refreshData))
        self.tableView = tableView
    }
}

extension ViewController {
    @objc func refreshData(_ refreshControl: UIRefreshControl) {
        print("refreshing")
        tableView?.endRefreshing(deadline: .now() + .seconds(3))
    }
}

extension ViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int { return 1 }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 20 }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.text = "\(indexPath)"
        return cell
    }
}

extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.pullAndRefresh()
    }
}

2

সুইফট 5

private var pullControl = UIRefreshControl()

pullControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
        pullControl.addTarget(self, action: #selector(refreshListData(_:)), for: .valueChanged)
        if #available(iOS 10.0, *) {
            tableView.refreshControl = pullControl
        } else {
            tableView.addSubview(pullControl)
        }
// Actions
@objc private func refreshListData(_ sender: Any) {
        self.pullControl.endRefreshing() // You can stop after API Call
        // Call API
    }

1

আমি প্রতি ক্লাসে রিফ্রেশ করার জন্য টান টানার একটি এক্সটেনশন করার পরামর্শ দিই।

1) একটি খালি সুইফ্ট ফাইল করুন: ফাইল - নতুন - ফাইল - সুইফট ফাইল।

2) নিম্নলিখিত যোগ করুন

    //  AppExtensions.swift

    import Foundation
    import UIKit    

    var tableRefreshControl:UIRefreshControl = UIRefreshControl()    

    //MARK:- VIEWCONTROLLER EXTENSION METHODS
    public extension UIViewController
    {
        func makePullToRefreshToTableView(tableName: UITableView,triggerToMethodName: String){

            tableRefreshControl.attributedTitle = NSAttributedString(string: "TEST: Pull to refresh")
            tableRefreshControl.backgroundColor = UIColor.whiteColor()
            tableRefreshControl.addTarget(self, action: Selector(triggerToMethodName), forControlEvents: UIControlEvents.ValueChanged)
            tableName.addSubview(tableRefreshControl)
        }
        func makePullToRefreshEndRefreshing (tableName: String)
        {
            tableRefreshControl.endRefreshing()
//additional codes

        }
    }    

3) আপনার দৃষ্টিতে কন্ট্রোলার এই পদ্ধতিগুলিকে কল করুন:

  override func viewWillAppear(animated: Bool) {

self.makePullToRefreshToTableView(bidderListTable, triggerToMethodName: "pullToRefreshBidderTable")
}

৪) কিছুটা সময় আপনি রিফ্রেশ শেষ করতে চেয়েছিলেন:

  func pullToRefreshBidderTable() {
self.makePullToRefreshEndRefreshing("bidderListTable")    
//Code What to do here.
}
OR    
self.makePullToRefreshEndRefreshing("bidderListTable")

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

ধন্যবাদ অনিল! আমি সেগুলি সরাতে ভুলে গেছি।
এজি

1

রিফ্রেশ করার জন্য আমি ব্যবহার করছি

DGElasticPullToRefresh

https://github.com/gontovnik/DGElasticPullToRefresh

স্থাপন

শুঁটি 'ডিজিএলাস্টিকপুলটোরিফ্রেস'

import DGElasticPullToRefresh

এবং এই ফাংশনটি আপনার সুইফ্ট ফাইলে রাখুন এবং আপনার থেকে এই মজাদার কল করুন

ওভাররাইড ফানক ভিউ উইল অ্যাপয়ার (_ অ্যানিমেটেড: বুল)

     func Refresher() {
      let loadingView = DGElasticPullToRefreshLoadingViewCircle()
      loadingView.tintColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
      self.table.dg_addPullToRefreshWithActionHandler({ [weak self] () -> Void in

          //Completion block you can perfrom your code here.

           print("Stack Overflow")

           self?.table.dg_stopLoading()
           }, loadingView: loadingView)
      self.table.dg_setPullToRefreshFillColor(UIColor(red: 255.0/255.0, green: 57.0/255.0, blue: 66.0/255.0, alpha: 1))
      self.table.dg_setPullToRefreshBackgroundColor(self.table.backgroundColor!)
 }

এবং ভিউ অদৃশ্য হয়ে যাওয়ার সাথে সাথে রেফারেন্স সরিয়ে দিতে ভুলবেন না

রিফ্রেশ করতে টান মুছে ফেলতে আপনার এই কোডটি .োকান

ওভাররাইড ফানক ভিউডিডডিস্পিয়ার (_ অ্যানিমেটেড: বুল)

override func viewDidDisappear(_ animated: Bool) {
      table.dg_removePullToRefresh()

 }

এবং এটি দেখতে হবে

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

শুভ কোডিং :)


1

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

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

var pullControl = UIRefreshControl()

override func viewDidLoad() {
   super.viewDidLoad()

   pullControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
   pullControl.addTarget(self, action: #selector(pulledRefreshControl(_:)), for: UIControl.Event.valueChanged)
   tableView.addSubview(pullControl) // not required when using UITableViewController
}

@objc func pulledRefreshControl(sender:AnyObject) {
   // Code to refresh table view  
}

0

আপনি টেবিলভিউয়ের এই সাবক্লাসটি ব্যবহার করতে পারেন:

import UIKit

protocol PullToRefreshTableViewDelegate : class {
    func tableViewDidStartRefreshing(tableView: PullToRefreshTableView)
}

class PullToRefreshTableView: UITableView {

    @IBOutlet weak var pullToRefreshDelegate: AnyObject?
    private var refreshControl: UIRefreshControl!
    private var isFirstLoad = true

    override func willMoveToSuperview(newSuperview: UIView?) {
        super.willMoveToSuperview(newSuperview)

        if (isFirstLoad) {
            addRefreshControl()
            isFirstLoad = false
        }
    }

    private func addRefreshControl() {
        refreshControl = UIRefreshControl()
        refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
        refreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged)
        self.addSubview(refreshControl)
    }

    @objc private func refresh() {
       (pullToRefreshDelegate as? PullToRefreshTableViewDelegate)?.tableViewDidStartRefreshing(self)
    }

    func endRefreshing() {
        refreshControl.endRefreshing()
    }

}

1 - ইন্টারফেস বিল্ডারে আপনার টেবিলের শ্রেণি পরিবর্তন করুনভিউ করুন PullToRefreshTableViewবা একটি PullToRefreshTableViewপ্রোগ্রামিকভাবে তৈরি করুন

2 - PullToRefreshTableViewDelegateআপনার দৃশ্যের নিয়ামকটি প্রয়োগ করুন

3 - tableViewDidStartRefreshing(tableView: PullToRefreshTableView)যখন সারণী দর্শনটি রিফ্রেশ করা শুরু করে তখন আপনার ভিউ কন্ট্রোলারে কল করা হবে

4 - yourTableView.endRefreshing()রিফ্রেশ শেষ করতে কল করুন


0

এইভাবে আমি এক্সকোড 7.2 ব্যবহার করে এটি কাজ করেছিলাম যা আমি মনে করি এটি একটি বড় বাগ major আমি আমার UITableViewControllerভিতরে এটি ব্যবহার করছিviewWillAppear

refreshControl = UIRefreshControl()
refreshControl!.addTarget(self, action: "configureMessages", forControlEvents: .ValueChanged)
refreshControl!.beginRefreshing()

configureMessages()

func configureMessages() {
    // configuring messages logic here

    self.refreshControl!.endRefreshing()
}

আপনি দেখতে পাচ্ছেন, তারপরে configureMessage()আমার সেটআপ করার পরে আমাকে আক্ষরিক পদ্ধতিতে কল করতে UIRefreshControlহবে, পরবর্তী রিফ্রেশগুলি ভাল কাজ করবে।


-1

অন্যের উত্তরগুলি সঠিক তবে আরও বিশদ জন্য এই পোস্টটি রিফ্রেশ করতে টানুন

স্টোরিবোর্ডে রিফ্রেশিং সক্ষম করুন

আপনি যখন কোনও ইউআইটিএবলভিউ কনট্রোলারের সাথে কাজ করছেন তখন সমাধানটি মোটামুটি সহজ: প্রথমে আপনার স্টোরিবোর্ডে টেবিল ভিউ কন্ট্রোলার নির্বাচন করুন, বৈশিষ্ট্য পরিদর্শকটি খুলুন এবং সতেজকরণ সক্ষম করুন:

একটি UITableViewController বক্সের বাইরে একটি ইউআইআরআইফ্রেশকন্ট্রোলের একটি রেফারেন্স সহ সজ্জিত। যখন ব্যবহারকারী নীচে নেমে আসে তখন আপনাকে রিফ্রেশটি শুরু করতে এবং সম্পূর্ণ করতে কয়েকটি জিনিস কেবল তারের প্রয়োজন।

ডিভিডলোড () দেখুন ওভাররাইড করুন

আপনার দর্শন ডিডলয়েড () এর ওভাররাইডে, নীচে রিফ্রেশটি হ্যান্ডেল করার জন্য একটি লক্ষ্য যুক্ত করুন:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
        
    self.refreshControl?.addTarget(self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged)
}
  1. যেহেতু আমি "হ্যান্ডেল রিফ্রেশ:" (কর্নেলটি নোট করুন! )টিকে ক্রিয়া আর্গুমেন্ট হিসাবে নির্দিষ্ট করেছি, তাই এই নামের সাথে এই ইউআইটিএবলভিউ কনট্রোলার শ্রেণিতে আমার কোনও ক্রিয়া সংজ্ঞায়িত করা দরকার। অতিরিক্তভাবে, ফাংশনটিতে একটি যুক্তি নেওয়া উচিত
  2. আমরা চাই যে এই পদক্ষেপটি ইউআইসিএন্ট্রোলভেন্টের জন্য বলা হবে ভ্যালু চ্যাঞ্জড
  3. কল করতে ভুলবেন না refreshControl.endRefreshing()

আরও তথ্যের জন্য দয়া করে লিঙ্কটি উল্লেখ করতে যান এবং সমস্ত ক্রেডিট সেই পোস্টে যায়


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