मैं एक मोडल में UIWebView लोड कर रहा हूं। वेब पेज में कुछ इनपुट हैं जो आईओएस 5 में बिल्कुल सही काम करते हैं। हालांकि आईओएस 6 में, जब भी कोई इनपुट फोकस हो जाता है, तो कुंजीपटल फॉर्म के स्वचालित 'केंद्रित' कर रहा है, भले ही इनपुट में ऊपर दिखाया जाने वाला बहुत सारे कमरे हों कुंजीपटल। चूंकि कुछ इनपुट पृष्ठ के शीर्ष पर हैं, इसलिए इससे उन्हें बाहर देखने में मजबूर किया जाता है ताकि उपयोगकर्ता यह नहीं देख सके कि वे क्या टाइप कर रहे हैं। इनपुट देखने के लिए बैक अप को स्क्रॉल करने से कुंजीपटल खारिज होने तक इनपुट को रोकना बंद कर देता है (बदले में इसे फिर से देखने के लिए स्क्रॉल करना)। क्या यह आईओएस 6 में एक अपेक्षित व्यवहार है? जब कोई इनपुट फोकस प्राप्त करता है (जैसे आईओएस 5 कैसे काम करता है) को वेबव्यू स्क्रॉल करने से रखने का कोई तरीका है?UIWebView इनपुट फोकस पर स्क्रॉलिंग आईओएस 6 केवल
उत्तर
अपने कोड की आंतरिक कार्यप्रणाली को जानने के बिना, मैं जितना संभव हो उतना मदद करने की कोशिश करने जा रहा हूं। यदि कुछ और नहीं है, तो मुझे आशा के लिए कुछ भोजन प्रदान करने की उम्मीद है। आप दो सवाल पूछा:
यह iOS6 में अपेक्षित व्यवहार है?
आप क्या देख रहे हैं यकीन है कि के लिए काफी अजीब है। यह अजीब बात है कि वेब व्यू इनपुट फ़ील्ड को केंद्रित करने के बजाय फॉर्म को केंद्रित कर रहा है। और यह निश्चित रूप से सक्रिय इनपुट फ़ील्ड को देखने के लिए स्क्रॉल करने का कारण नहीं बनना चाहिए। इसके अलावा, कीबोर्ड काम करना बंद कर देता है, जो काफी विषम है। हालांकि, वेबव्यू स्क्रॉलिंग के संबंध में आईओएस 5 और 6 में विभिन्न व्यवहार देखने की उम्मीद है। जैसा कि आपने कहा था, आईओएस 5 इनपुट फ़ील्ड को स्क्रॉल करता है जबकि आईओएस 6 इसे केंद्र में रखता है।
क्या इनपुट को फोकस करने पर वेबव्यू को स्क्रॉल करने से कोई तरीका है (जैसे आईओएस 5 कैसे काम करता है)?
हां। मैं स्क्रॉलिंग से वेब व्यू को रोकने के लिए बस नीचे यह करने के लिए कोड प्रदान करता हूं। यदि वह वही है जो आप करना चाहते हैं, तो बढ़िया। हालांकि, स्क्रॉलिंग से वेब व्यू को रोकना आईओएस 5 के समान व्यवहार प्राप्त करने जैसा नहीं है। फिर भी, मैं आपको यह विकल्प देना चाहता था जैसा आपने अनुरोध किया था।
#import "ViewController.h"
@interface ViewController() <UIScrollViewDelegate> {
CGPoint origin;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
[self.webView loadRequest:request];
self.webView.scrollView.delegate = self;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow)
name:UIKeyboardWillShowNotification
object:nil];
// NOTE THAT SIMPLY DISABLING THE SCROLL WILL NOT PREVENT KEYBOARD SCROLL
//[self.webView.scrollView setScrollEnabled:NO];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)keyboardWillShow {
NSLog(@"keyboard");
origin = self.webView.scrollView.contentOffset;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"scroll");
[self.webView.scrollView setContentOffset:origin];
}
@end
आप लगातार स्क्रॉल व्यवहार चाहते हैं ...
मैं इस पुस्तक संशोधन अप कोड करने के लिए कुछ समय ले लिया। आप इसे अपने स्वयं के स्क्रॉल व्यवहार में संदर्भ के रूप में उपयोग कर सकते हैं जो आईओएस 5 & 6 पर संगत है। इस कोड में: जब उपयोगकर्ता किसी वेबपृष्ठ पर टेक्स्ट इनपुट बॉक्स पर क्लिक करता है, तो कोड डिफ़ॉल्ट स्क्रॉलिंग व्यवहार को रोककर रोक देगा पेज अपनी वर्तमान स्थिति में स्क्रॉल किया गया। दुर्भाग्यवश, सभी स्क्रॉलिंग को रद्द करने का कोई तरीका नहीं है, बल्कि आपको स्क्रॉल को ओवरराइड करना होगा।एक बार जब डिफ़ॉल्ट स्क्रॉलिंग "दबा दी गई" हो जाती है, तो उसे सक्रिय इनपुट बॉक्स की स्थिति मिल जाती है और उस स्थिति में स्क्रॉल हो जाता है। यह स्क्रीन के शीर्ष पर सक्रिय इनपुट बॉक्स डाल देगा। आप इसे अपनी वरीयताओं के अनुसार संशोधित कर सकते हैं। उदाहरण के लिए, आप इसे आईओएस 5 की तरह बनाने के लिए [UIScrollView scrollRectToVisible] का उपयोग कर सकते हैं।
#import "ViewController.h"
@interface ViewController() <UIScrollViewDelegate> {
CGPoint origin;
CGPoint activeElementOrigin;
BOOL pauseScroll;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
[self.webView loadRequest:request];
self.webView.scrollView.delegate = self;
pauseScroll = NO;
origin = CGPointZero;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow)
name:UIKeyboardDidShowNotification
object:nil];
}
- (void)keyboardWillShow {
NSLog(@"keyboard");
pauseScroll = YES;
origin = self.webView.scrollView.contentOffset;
}
- (void)keyboardDidShow {
NSLog(@"keyboard DID SHOW");
pauseScroll = NO;
[self.webView.scrollView setContentOffset:activeElementOrigin animated:YES];
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"scroll");
if (pauseScroll) {
[self.webView.scrollView setContentOffset:origin animated:NO];
NSString *javaScript = [NSString stringWithFormat:@"function f(){ var textField = document.activeElement; return textField.getBoundingClientRect().top; } f();"];
NSString *textFieldRectTop = [self.webView stringByEvaluatingJavaScriptFromString:javaScript];
activeElementOrigin = origin;
activeElementOrigin.y = [textFieldRectTop floatValue]-10;
}
}
@end
यदि यह कोड आपको मदद की, यह मेरे लिए इनाम पुरस्कृत करने के लिए आप में से बहुत अच्छा होगा। मैं विनम्रतापूर्वक सराहना करता हूं।
का संभावित हल इस UIWebView में स्क्रॉल अक्षम करने जा सकता है:
UIScrollView *scrollView = webView.scrollView;
[scrollview setScrollEnabled:NO];
[scrollView bounces:NO];
एक और इस scrollview की UIEdgeInsets की स्थापना की जा सकती है, लेकिन मैं इस बारे में ज्यादा पता नहीं है।
मुझे लगता है कि यह सिर्फ ते कुंजीपटल (जैसे सफारी करता है) के शीर्ष पर इनपुट क्षेत्र बनाने के लिए स्क्रॉल करने के लिए दोनों आईओएस 5 और 6 में एक मानक व्यवहार है।
scrollEnabled केवल उपयोगकर्ता स्क्रॉलिंग को रोकता है, कीबोर्ड सिस्टम स्क्रॉलिंग नहीं –
आपकी प्रतिक्रिया के लिए धन्यवाद जानना अच्छा है – dulgan
इस पोस्ट पर जाँच की जवाब अपने जवाब है: How to make a UITextField move up when keyboard is present?
संक्षेप में, आप आदानों जो दृश्य से बाहर धक्का दे दिया जा रहा है जिसमें दृश्य बढ़ने की जरूरत है। पोस्ट में नमूना कोड भी शामिल है कि इसे कैसे करें।
उम्मीद है कि इससे मदद मिलती है।
प्रश्न विशेष रूप से वेब व्यू के संबंध में है। एक वेबपृष्ठ के भीतर UITextField और एक फॉर्म इनपुट फ़ील्ड के बीच एक बड़ा अंतर है। आपके द्वारा संदर्भित पोस्ट वेब व्यू पर काम नहीं करेगा। –
- 1. कीबोर्ड डिस्प्ले पर स्क्रॉलिंग को रोकें आईओएस 6
- 2. आईओएस 6 UIwebView CSS3D ट्रांसफॉर्म एचडब्ल्यू त्वरित नहीं हैं
- 3. आईओएस 6 एकाधिक UIWebViews: जावास्क्रिप्ट केवल एक
- 4. आईओएस 6 में स्मार्ट बैनर प्रदर्शित करना UIWebview घटक
- 5. आईओएस 6 पर CIGAussianBlur और CIAffineClamp 6
- 6. आईओएस UIWebView
- 7. UIWebView आईओएस 5
- 8. UIWebView (आईओएस)
- 9. आईओएस 6 UIWebView राज्य बहाली कैसे काम करता है?
- 10. आईओएस 6
- 11. आईओएस UIWebView लीक
- 12. आईओएस 6 एम्बेड यूट्यूब
- 13. आईओएस 6
- 14. आईओएस 6
- 15. आईओएस 6
- 16. आईओएस 6
- 17. आईओएस 6
- 18. आईओएस UIwebView ऑथ कुकीज़
- 19. आईओएस 6
- 20. आईओएस 6
- 21. इनपुट तत्व पर जावास्क्रिप्ट परिवर्तन घटना केवल फोकस खोने पर आग लगती है
- 22. UIWebView webViewDidFinishLoad आईओएस
- 23. आईओएस 6
- 24. आईओएस 6
- 25. आईओएस 6
- 26. UIWebview क्षैतिज स्क्रॉलिंग को कैसे अक्षम करें?
- 27. आईओएस 6 में MKRoadWidthAtZoomScale 6?
- 28. आईओएस 6 सिम्युलेटर पर UITableViewController क्रैश
- 29. आईफोन UIWebView - क्या ऑटो इनपुट इनपुट फ़ील्ड पर बंद हो सकता है?
- 30. आईओएस 5 और आईओएस 6
आपके UIWebView का फ्रेम क्या है? – Jessedc
क्या आप मुझे वेब व्यू में जो खोल रहे हैं उसे लिंक/यूआरएल दे सकते हैं। ताकि मैं आपकी समस्या को बेहतर समझ सकूं। – Swati