2011-12-17 9 views
6

पर काम कर रहा है मेरे पास दो व्यू कंट्रोलर हैं। पृष्ठ नियंत्रण के लिए एक स्क्रॉलव्यू और एक विस्तार से (स्क्रॉल लंबवत)।scrollToTop आईफोन पर काम नहीं कर रहा है लेकिन यह आईपैड

जब मैं आईफोन पर स्टेटस बार पर क्लिक करता हूं तो scrollToTop काम नहीं कर रहा है, और आईपैड में scrollToTop काम कर रहा है।

मुझे यकीन है कि scrollView.scrollToTop हाँ है। क्योंकि मैं इसे पहले ही प्रिंट कर चुका हूं।

कोई भी जानता है कि आईफोन स्क्रॉल का कारण क्या नहीं है? scrollview प्रतिनिधि को फोन करके मैं कोशिश:

धन्यवाद

संपादित करें। आईपैड में इस प्रतिनिधि ने इसे बुलाया। - (BOOL) scrollViewShouldScrollToTop: (UIScrollView *) scrollView

आईफोन में इसे नहीं कहा जाता है। मैं पहले से ही सामग्री ScrollView.delegate = self दोनों का उपयोग करता हूं; लेकिन काम नहीं कर रहा :(

संपादित iphone: UIWindow (काम नहीं कर रहा)

Window.h

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 
@interface Window : UIWindow 
@end 

Window.m

#import "Window.h" 

@implementation Window 

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
if ([event type] == UIEventTypeTouches && point.y < 250) { 
    //Send Your Notification Here 
    NSLog(@"KAROOO"); 
} 
NSLog(@"HELLOWW"); 
return [super hitTest:point withEvent:event]; 
} 
@end 

उपवर्गीकरण AppDelegate.h

प्रयास करें
@property (nonatomic, strong) IBOutlet Window *window; 

AppDelegate.m

@synthesize window = _window; 

उत्तर

3

मैं तुम्हें क्या समझ से एक साथ स्क्रीन पर 2 UIScrollViews है।

मैंने जो देखा है उससे & अनुभवी, आईओएस 4 पर 2 यूआईएसक्रॉल दृश्यों को तरफ से अपरिभाषित व्यवहार देता है। स्क्रॉलव्यू में से एक स्क्रॉल हो सकता है, कभी-कभी अन्य, कभी-कभी न तो।

iOS 5 पर यदि आप 2 UIScrollViews कंधे से कंधा मिलाकर तो स्थिति पट्टी पर दोहन "स्क्रॉल शीर्ष पर" UIScrollView सही

"अपने नल के नीचे" मैं नहीं जानता कि यह कैसे काम करता है, लेकिन यह किया गया है मेरा अवलोकन आईओएस 5 स्मार्ट है !!

यदि आपके यूआईएसक्रॉल व्यू एक दूसरे से ऊपर हैं तो शायद व्यवहार अपरिभाषित है। मैंने चेक नहीं किया है

उम्मीद है कि इससे मदद मिलती है।

यदि आप इसे किसी भी तरह से काम करना चाहते हैं तो यहां एक संभावित समाधान है।

उपवर्ग या UIWindow पर एक श्रेणी जोड़कर एक इशारा पहचानकर्ता जोड़ने/या लागू hitTest कि केवल वाई < 20 के लिए नल का पता लगाता है और इतने पर और फिर इसे अपने ViewController में इस पर सूचना भेजने और सुनने और प्रोग्राम के रूप में स्क्रॉल है UIScrollView शीर्ष पर।

संपादित

UIWindow उपवर्ग में यह लागू (आईपैड)

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    if ([event type] == UIEventTypeTouches && point.y < 20 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait) { 
     NSLog(@"Portrait"); 
    } else if ([event type] == UIEventTypeTouches && point.y > 1004 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown) { 
     NSLog(@"PortraitUpsideDown"); 
    } else if ([event type] == UIEventTypeTouches && point.x < 20 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) { 
     NSLog(@"LandscapeLeft"); 
    } else if ([event type] == UIEventTypeTouches && point.x > 748 && [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) { 
     NSLog(@"LandscapeRight"); 
    } 
    return [super hitTest:point withEvent:event]; 
} 
+0

मेरे आईफोन आईओएस 5 में भी काम नहीं कर रहा है। आईपैड में 4.3 और 5 दोनों काम कर रहे हैं। मैं UIWindow पर एक श्रेणी कैसे जोड़ सकता हूं और इशारा पहचानकर्ता जोड़ सकता हूं? –

+0

मैंने UIWindow subclass – NSIntegerMax

+0

में कोड जोड़ने के लिए कोड जोड़ा है मैंने अपने प्रश्न को यूइविंडो सबक्लास के साथ संपादित किया है। क्या वो सही है? यदि कोड सही है, तो nslog मुद्रित नहीं है। –

1

एक ही स्क्रीन पर मामला आप एक से अधिक UIScrollView उदाहरण (सहित उपवर्गों जैसे UITableView आदि) है में आप की जरूरत है परिभाषित करें कि स्क्रॉल टोटोप ईवेंट पर कार्य करना चाहिए। इसका मतलब है कि, आपको उन उदाहरणों के माध्यम से जाना होगा और अपनी scrollToTop संपत्ति को उस नंबर को छोड़कर सेट करना होगा, जिसे आप ऐसा करना चाहते हैं। मेरे लिए यह हमेशा काम करता है। यदि ऐसा नहीं होता है, तो यह किसी अन्य की वजह से था कि मुझे नहीं पता था कि यह वहां है। उस स्थिति में मैं बस सभी सबव्यूज़ को पीछे हटने वाली संपत्ति को अक्षम करने के लिए थ्रूग चला गया और फिर यह अपेक्षित के रूप में काम करना शुरू कर दिया। चीयर्स। :)

0

मेरा समाधान एनएसआईएनटेगर मैक्स के उत्तर पर आधारित है। इस तरह हमें अभिविन्यास की परवाह नहीं है या हार्डकोड किए गए मान हैं।

घोषित इस मैक्रो

#define isInStatusBar(frame, point) (point.x >= frame.origin.x && point.x <= (frame.origin.x+frame.size.width) && point.y >= frame.origin.y && point.y <= (frame.origin.y+frame.size.height)) 

और लागू विधि:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGRect frame = [[UIApplication sharedApplication] statusBarFrame]; 

    if ([event type] == UIEventTypeTouches && isInStatusBar(frame, point)) { 
     [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationAppDidTouchStatusBar object:nil]; 
    } 

    return [super hitTest:point withEvent:event]; 
} 
1

पता नहीं क्या एप्पल धूम्रपान कर रहे थे लेकिन डिजाइन द्वारा, iPhone पर व्यवहार आईपैड से अलग है। Apple's documentation इस प्रकार है कि "विशेष Condsideration" नोट शामिल है ...

iPhone पर, स्क्रॉल करने वाली शीर्ष इशारा कोई प्रभाव नहीं है, अगर वहाँ अधिक एक से स्क्रॉल दृश्य परदे पर है कि scrollsToTop करने के लिए सेट हाँ।

तो iPhone पर आप यह सुनिश्चित करना भी है तो केवल एक UIScrollView (या UITableView/UICollectionView/UIWebView आदि) अपनी scrollsToTop = YES है कि है कि वहाँ है।

स्क्रॉल के बाद से YT को डिफ़ॉल्ट रूप से सेट करने के लिए आपको UIScrollView के लिए स्पष्ट रूप से scrollsToTop = NO सेट करना होगा, जब उपयोगकर्ता स्टेटस बार को टैप करता है तो आप स्क्रॉल नहीं करना चाहते हैं।

संबंधित मुद्दे