2010-07-19 12 views
11

मुझे TableViewController के साथ एक अजीब समस्या है। दस्तावेज़ में यह कहता है कि तालिका ViewController विधि -flashScrollIndicators के साथ भी कार्य करता है जब तालिका दृश्यमान क्षेत्र का सम्मान "oversized" है।TableViewController स्क्रॉल संकेतक फ्लैश नहीं करता है भले ही तालिका बड़ा हो, दृश्य

मेरा ऐप एक टैब नियंत्रक में लोड 3 एनवी नियंत्रक में शामिल है। प्रत्येक एनवी नियंत्रक के पास रूट व्यू कंट्रोलर के रूप में एक टेबल व्यू कंट्रोलर का सबक्लास होता है। प्रत्येक "मॉडल" एक प्लिस्ट फ़ाइल से पॉप्युलेट किया जाता है, जो इसकी सामग्री को -viewDIdLoad में एक सरणी में लोड करता है, बाद में सबकुछ तालिका में पास हो जाता है। सब कुछ प्रोग्रामेटिक रूप से कोई आईबी लोड नहीं है।

मुझे अपने ऐप में पता चला है कि जब यह पहला दृश्य लोड करता है (एक तालिका दृश्य नियंत्रक के साथ एक एनवी नियंत्रक रूट के रूप में) स्क्रॉल बार चमक नहीं रहा है, भले ही सेल की संख्या पर्याप्त हो। यदि मैं एक और टैब चुनता हूं, जो एक और एनवी नियंत्रक लोड करता है (रूट के रूप में t.v.c. के साथ) स्क्रॉल बार फिर से नहीं दिखाया जाता है। जब मैं पहले नौसेना नियंत्रक से संबंधित टैब दबाता हूं तो स्क्रॉलबार चमकता है।

तो मैं यह प्रोग्राम के रूप में फ्लैश, लेकिन कोई रास्ता बनाने के लिए कोशिश की है, कोड सरल लगता है:

[self.tableView flashScrollIndicators]; 

मैं इसे लगभग हर जगह डाल करने के लिए कोशिश की है। सबसे पहले -viewDidLoad (जैसा कि दस्तावेज़ में सुझाया गया है) में, फिर डीडएपियर और इन -viewWillAppear देखें। t.v.c. के दृश्य को डालने के लिए कोड कोडिंग का भी प्रयास करने का प्रयास किया। एक टेबल व्यू के रूप में।

[((UITableView*)self.view) flashScrollIndicators]; 

.. परिणामस्वरूप।

मैंने ऐप्पल नमूना को देखना शुरू कर दिया है और मैंने पाया है कि ऐप्पल की तालिका में कस्टम नमूना (अलग-अलग समय वाला एक) स्क्रॉल बार भी फ़्लैश नहीं करता है। सिम और डिवाइस दोनों पर परीक्षण किया गया।

एक बग है ?, क्या इसे प्रोग्रामेटिक रूप से दिखाने का कोई सही तरीका है? क्या कोई मेरी मदद कर सकता है? सम्मान, एंड्रिया

+0

यह सिर्फ काम करना चाहिए जब आप 'flashScrollIndicators' फोन, लेकिन मैं इसे पुष्टि कर सकते हैं चीजों को इस तरह रखने के लिए सबसे अच्छी जगह को इंगित करने के लिए बेहद निराशाजनक हो सकता है। इसे दो बार बीटीडब्लू में कॉल करने में कोई दंड नहीं है, इसलिए बस इस कॉल के साथ अपनी परियोजना को कूड़ा करें ;-) – mvds

+0

हाय एमवीडी दुर्भाग्य से यह काम नहीं करता है, भले ही मैं अपने आप में कॉल करने का प्रयास करता हूं -व्यूडलोड, -व्यूविल्लएपियर, -viewDidAppear। – Andrea

+0

क्या आपने यह देखा है कि self.tableView शून्य नहीं है? क्या आपने पहले -reloadData को आजमाया था? –

उत्तर

38

या अधिक संक्षेप में:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0]; 
} 
+0

यह काम करता है !!! धन्यवाद! 'UIViewController * chatViewController' दिखाई देने पर मैं' UITableView * ChatContent' के स्क्रॉल संकेतकों को फ्लैश करने के लिए [acaniChat] (https://github.com/acani/acaniChat) में इसका उपयोग करता हूं। – ma11hew28

+0

संपादित, सुपर क्लास के कार्यान्वयन को कॉल करना भूलना बुरा आदत है;) – matm

+0

मैं बस [self.scrollView flashScrollIndicators] का उपयोग कर रहा था; जो किसी विशेष मामले में काम नहीं करता है, जबकि आपका प्रदर्शन चयनकर्ता समाधान बहुत अच्छा काम करता है। धन्यवाद। –

12

मुझे बिल्कुल वही समस्या थी। मैं viewDidAppear: विधि में देरी चयनकर्ता डाल कर अंत में इसके आसपास हो गया। अजीब बात है, मैं इसे 0 सेकंड पर सेट कर सकता हूं और यह अभी भी ठीक काम करता है।

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self performSelector:@selector(flashTableScrollIndicators) withObject:nil afterDelay:0.0]; 
} 

- (void)flashTableScrollIndicators 
{ 
    [self.tableView flashScrollIndicators]; 
} 
+0

यही वह समाधान है जिसे मैं ढूंढ रहा था। THX। सम्मान, एंड्रिया – Andrea

+2

आप इसे इस तरह से भी कर सकते हैं [self.tableView performSelector: @selector (flashScrollIndicators) ऑब्जेक्ट: nil afterDelay: 0.0]; ' – matm

3

यह प्रदर्शित नहीं किया जाता है जब आप को दिखाने के खंड सूचकांक खिताब।

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 
+0

+1 जानकारी के लिए – filou

0

मेरे समाधान "flashScrollIndicators()" संदेश कुछ देरी "dispatch_after" उपयोग करने के साथ भेजने के लिए किया गया था:

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC))) 

dispatch_after(delayTime, dispatch_get_main_queue(), 
{() -> Void in 
    myScrollView.flashScrollIndicators() 
}) 
संबंधित मुद्दे