UITableViewController के बिना UITableView ताज़ा करने के लिए खींचो


180

मैं एक UIVIVController के भीतर एक UITableView में ताज़ा सुविधा के लिए एक पुल को लागू करने की कोशिश कर रहा हूँ। मैं UITableViewController का उपयोग नहीं कर सकता क्योंकि मैं चाहता हूं कि UITableView दृश्य नियंत्रक में एक छोटा सबव्यू हो, इसके ऊपर कुछ अन्य सामान हो। मुझे लगता है कि यह संभव है, लेकिन क्या किसी ने इसका कार्यान्वयन देखा है?

जवाबों:


465

एक UITableViewका उपयोग किए बिना सीधे एक ताज़ा नियंत्रण जोड़ें UITableViewController:

override func viewDidLoad() {
    super.viewDidLoad()
    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged)

    if #available(iOS 10.0, *) {
        tableView.refreshControl = refreshControl
    } else {
        tableView.backgroundView = refreshControl
    }
}

@objc func refresh(_ refreshControl: UIRefreshControl) {
    // Do your job, when done:
    refreshControl.endRefreshing()
}

1
उत्कृष्ट और आसान। यह मेरे लिए तब काम करता है, जब मैंने इसे iOS 7.0.4 पर UIViewController में जोड़े गए टेबल व्यू पर आज़माया।
thandasoru

5
किसी को भी समस्या है जहां नियंत्रण ही दिखाई नहीं है, लेकिन अन्यथा ठीक काम करने के लिए लगता है?
रिमोटविज़न

16
"क्लिक" होते ही टेबल व्यू अप्रत्याशित रूप से नीचे कूदने लगता है। अभी तक यकीन नहीं हुआ।
बजे बॉब स्प्रीएन

3
मैंने पाया कि इसे देखने के लिए ज़रूरी है कि यह सुनिश्चित न हो कि iOS 7 फीचर है - मैं अभी इसे iOS 8 में टेस्ट कर रहा हूँ ...
जैक सोलोमन

4
ताज़ा करेंकंट्रोल तालिका के शीर्ष पर दिखाई देता है। मैंने इसे तय किया: tableView.insertSubview(refreshControl, atIndex: 0)इसके बजायtableView.addSubview(refreshControl)
kbpontius

12

उद्देश्य-सी :

यह आप टेबल व्यू के लिए रिफ्रेश करने के लिए पुल को कैसे लागू कर सकते हैं। संग्रह दृश्य के मामले में भी ऐसा ही है। बस संग्रह दृश्य के साथ तालिका दृश्य आवंटन बदलें।

UITableView *tableViewDemo  =  [[UITableView alloc]init];
tableViewDemo.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
tableViewDemo.dataSource =  self;
tableViewDemo.delegate =  self;
[self.view addSubView: tableViewDemo];

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

#pragma mark - Handle Refresh Method

-(void)handleRefresh : (id)sender
{
   NSLog (@"Pull To Refresh Method Called");
   [refreshController endRefreshing];
}

ओबज-सी संस्करण में केवल 9 अपवोट्स कैसे होते हैं जब स्विफ्ट संस्करण> 430 है?
चेस रॉबर्ट्स

1
@ChaseRoberts, कि एक फरवरी 13 को उत्तर दिया गया है, संपादन इतिहास पर एक नज़र है, मूल रूप से यह उद्देश्य-सी में था, चूंकि उस समय स्विफ्ट नया था, हर एक स्विफ्ट संस्करण की तलाश में था ... stackoverflow.com/posts / 15010646 / संशोधन
इरफान

4

@Berik का यह समाधान ठीक काम करता है लेकिन UICableViewController के शीर्ष पर UIController प्रदर्शित होता है। इसे ठीक करने का तरीका यह परिवर्तन कर रहा है:

override func viewDidLoad() {
    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)
    tableView.backgroundView = refreshControl // <- THIS!!!
}

func refresh(refreshControl: UIRefreshControl) {
    // Do your job, when done:
    refreshControl.endRefreshing()
}

3
ताज़ा करेंकंट्रोल मेरे लिए तालिका के शीर्ष पर दिखाई देता है, लेकिन आपका सुझाव मेरे refreshControlगायब होने का कारण बनता है, नीचे नहीं दिखाई देता है tableView। मैंने इसे ठीक किया: tableView.insertSubview (refreshControl, atIndex: 0) के बजाय tableView.addSubview (रिफ्रेशकंट्रोल)
kbpontius

3

मैंने एक UIViewController और एक साधारण टेबल व्यू के साथ EGORefreshTableHeaderView को लागू किया है, चाल यह है कि उन स्थानों में जहां ईजीओ एक पैरामीटर के रूप में स्क्रॉल दृश्य लेता है, यदि आप टेबल व्यू देखते हैं तो स्क्रॉल दृश्य से विरासत में मिला है।

इसके लिए केवल और कुछ अतिरिक्त कनेक्शन की आवश्यकता है :)

उम्मीद है की यह मदद करेगा।


-1

ऐसा लगता है कि अगर आप ViewController के अंदर UIRefreshControl बनाने loadView विधि सब कुछ ठीक काम करता है। UIRefreshControl को जैसा होना चाहिए वैसा ही व्यवहार करता है। IOS 7.1 और iOS 8.2 के साथ परीक्षण किया गया


-1

मैंने ODRefreshControl का उपयोग कर समाप्त किया । यह ऊपर की तरह किसी भी हैक की जरूरत नहीं है tableView.backgroundView = refreshControl, लगभग उसी तरह से काम करता है, और बेहतर दिखने वाला यूआई देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.