অনুমোদিত ইউআইবিউবভিউতে স্ক্রোল অক্ষম করবেন?


91

আমি নিবন্ধের UITableViewঅধীনে একটি ওয়েব নিবন্ধ প্রদর্শন করতে হবে ।

আমি খুঁজে UIWebViewপেল একমাত্র বিকল্পটি ছিল টেবিলভিউ শিরোনামের একটিতে নিবন্ধটি প্রদর্শন করা ।

এটি করার জন্য আমাকে ওয়েবভিউ সামগ্রীতে উচ্চতা পেতে হবে এবং আমাকে ওয়েবভিউয়ের জন্য স্ক্রোলিং অক্ষম করতে হবে।

স্ক্রোলিং অক্ষম করার জন্য আমি দুটি সমাধান পেয়েছি:

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

বা জাভাস্ক্রিপ্টে:

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

আমি শুনেছি প্রথম সমাধানটি অ্যাপল নিষিদ্ধ করেছে তবে এর কোনও প্রমাণ আমার কাছে নেই। এই সমাধানটি ব্যবহার করে আমার আবেদন কি প্রত্যাখ্যান হবে? যদি তাই হয় তবে আমি কি দ্বিতীয় সমাধানটি প্রত্যাখ্যান না করে ব্যবহার করতে পারি?

উত্তর:


298

আইওএস 5 দিয়ে শুরু করে আমাদের ইউআইবিউবভিউয়ের স্ক্রোলভিউতে সরাসরি অ্যাক্সেস রয়েছে।
আপনি এই জাতীয় স্ক্রোলিং এবং বাউন্স অক্ষম করতে পারেন:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;

4
অনেক অনেক ধন্যবাদ, আমি ঠিক তাই খুঁজছিলাম @ জেএসডিডোর, আপনার এই উত্তরটি স্বীকৃত হিসাবে চিহ্নিত করা উচিত!
মার্চজি

কিছু কারণে, এটি আমার পক্ষে কাজ করছে না। :-( আমি একটি স্ক্রোলভিউ রেখেছি এবং এতে একটি ইউআইউইভিউভিউ রেখেছি। তারপরে উপরের দুটি লাইনটি ভিউইলঅ্যাপিয়ার পদ্ধতিতে সেট করুন But তবে স্ক্রোলটি এখনও ওয়েব ভিউতে কাজ করে someone আইওএস 7 সিমুলেটর।
আমোঘ নাটু

এর ব্যবহার কী webView.scrollView.bounces = NO;? যেহেতু প্রথম লাইনের কোডটি স্ক্রোলিং অক্ষম করেছে।
Gon

4
লোকে যখন উত্তর দেয় এবং অবদানকারীকে আপ ভোট দেওয়ার জন্য সময় না নিয়ে দৌড়ে যায় তখন এটি পছন্দ করুন। ভোটদানের উত্তর চয়ন করতে দয়া করে ব্যবহারকারীকে অবহিত করার কোনও উপায় নেই?
জন কোগান

4
সুইফ্ট ওয়েবভিউ.স্রোকল ভিউ.সক্রোলএনবলডের জন্য = মিথ্যা / ওয়েবভিউ.স্রোকল ভিউ.বউন্স = মিথ্যা
সিলভা

26

যেহেতু এই প্রশ্নটি এখনও কার্যকর, তাই এটি করার একটি নতুন উপায় আছে! (আইওএস 7.0+, সম্ভবত আইওএস 6 এছাড়াও, নিশ্চিত করা হয়নি)

webView.scrollView.scrollEnabled = NO;

যত্ন নিবেন :)


আমি যা বুঝতে পারি না তা হ'ল এটি আইবিতে নেই: /, অ্যাপল কি করছেন আপনি! তবুও খুব সুন্দর সমাধান!
মাহমুদ আহমদ

20

আপনি কেবল ওয়েব ভিউ ব্যবহারকারীর ইন্টারঅ্যাকশন সম্পত্তিটি কোনও হিসাবে সেট করতে পারেন

webView.userInteractionEnabled = NO;

এটি বেশ সহজ এবং দুর্দান্ত কাজ করে, ধন্যবাদ :)


28
তবে এটি লিঙ্কগুলি টেপ হওয়া থেকে বাধা দেয়।
গ্রাহাম পার্কস

@ গ্রাহাম পার্সস আমি আপনার মন্তব্যে শ্রদ্ধার সাথে উত্তরটি সম্পাদনা করেছি, দয়া করে এটি পর্যালোচনা করুন এবং অনুমোদন করুন, ধন্যবাদ :)
চৈতন্য

12

সমস্ত আইওএস সংস্করণের জন্য আপনি সেটস্ক্রোলএইনবেবলের পরিবর্তে এই কোডটি ব্যবহার করতে পারেন:

for (UIView *view in webview.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
       UIScrollView *scrollView = (UIScrollView *)view;
       scrollView.scrollEnabled = NO;
    }
}

প্রথমত, আমি "সেটস্ক্রোলএনবল" পদ্ধতিটি চেষ্টা করি এবং অ্যাপল আমার আইপা প্রত্যাখ্যান করে। তারপরে আমি এই পদ্ধতিটি পরিবর্তন করে গ্রহণ করেছি।
mturhan55



7

আমি জাভাস্ক্রিপ্ট মনে করি

<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}

সবচেয়ে ভাল সমাধান।

প্রকৃতপক্ষে :

আপনার প্রথম পরীক্ষা, বা

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

একটি (একই জিনিস) নথিভুক্ত না করার কারণে প্রত্যাখ্যান করা যেতে পারে বা আপনাকে আরও আইওএস আপডেটে অ্যাপ ক্র্যাশ করে তোলে।

এবং

[[myWebView scrollView] setBounces:NO];

পদ্ধতি আইওএস <5 এর সাথে কাজ করবে না।


5
[[[WebView subviews] lastObject] setScrollingEnabled:NO];

এটা আমার জন্য এটি বাছাই


4
এটির উপর নির্ভর করা এত ভুল হবে কারণ এটি কোনও উন্মুক্ত এপিআই নয়।
দীপক দান্দুপ্রোলু

[[[ওয়েবভিউ সাবভিউ] সর্বশেষ বিষয়] সেটস্ক্রোলিংএনবলড: কোনও] নয়; এটা আমার জন্য এটি বাছাই। যাইহোক, এটি আমার প্রশ্নের উত্তর দেয় না। আমার প্রশ্ন আমি কি এটি করার অনুমতিপ্রাপ্ত? দেখে মনে হচ্ছে এসডিকে দিয়ে স্ক্রোল অক্ষম করা নিষিদ্ধ। কিন্তু আমি নিশ্চিত না. এবং জাভাস্ক্রিপ্ট মাধ্যমে স্ক্রোল অক্ষম সম্পর্কে কি।
jsaddour

আমার প্রস্তাবটি আপেল, ইনফ্যাক্টের দ্বারা প্রত্যাখ্যানের কারণ হিসাবে সাবউভিউ অ্যারেতে শেষ সাবউইউকে কল করে এবং স্ক্রোলিং সেট করে এটির বিরুদ্ধে এনাবলযুক্ত এপিআই প্রকাশিত হবে তার কোনও প্রমাণ নেই? অবশ্যই ?. এবং হ্যাঁ এর কারণেই আপনি এটি ব্যবহার করতে পারেন। যদিও জাভাস্ক্রিপ্ট মাধ্যমে কোন ধারণা। দুঃখিত
theiOSDude

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



4

আমি মনে করি না অ্যাপল প্রথম বিকল্পটি নিষিদ্ধ করেছে।

আপনি চেষ্টা করতে পারেন

[[[Webview subviews] lastObject] setScrollingEnabled:NO];

আপনি যদি আপনার ইউআইউইউভিউ ভিউতে কোনও লিঙ্ক কাজ করতে না চান তবে আপনি এটি করতেও পারেন

[myWebView setUserInteractionEnabled:NO];



3

আমি UIWebViewএকটি এর ভিতরে কিছু গুলি রেখেছি UIScrollViewএবং এটি আমার জন্য স্ক্রোলিং ছিল না, যদি না আমি ওয়েবভিউগুলিতে (এমনকি এর সাথে [[webview scrollview] setScrollEnabled:NO]) ব্যবহারকারীর ইন্টারঅ্যাকশনটি অক্ষম করি । সুতরাং আমি UIWebViewএকটি এর ভিতরে এস স্থাপন করেছি UIViewএবং এটি আমার পক্ষে কাজ করেছে তবে তারপরে আমার এইচটিএমএলে ইন্টারেক্টিভ লিঙ্কগুলি বা ডিভগুলি UIWebViewআর কাজ করছে না।

আমার পক্ষে যে কাজটি হয়েছিল তা হ'ল এইচটিএমএল ইন্টারঅ্যাকশনগুলির UIWebViewভিতরে UIScrollViewকাজ করা তবে keepUIScrolling না।

আমি তখন ওয়েবভিউগুলির জন্য শোনার জন্য একটি কাস্টম প্রতিনিধি তৈরি করেছি window.open("http:/customEvent") থাকা HTML থেকে কল করা হয়। আমি একটি জাভাস্ক্রিপ্ট সোয়াইপ সনাক্তকরণও যুক্ত করেছি যা আমার কাস্টম ইভেন্টটিকে ছড়িয়ে দেবে।

যখন ওয়েবভিউ প্রতিনিধি এটি পান, আমি একটি নিয়ামককে একটি বিজ্ঞপ্তি পাঠিয়ে থাকি যা গতিশীলভাবে আমার স্ক্রল করে UIScrollView। স্পষ্টতই আমাকে পরবর্তী বা পূর্ববর্তী পৃষ্ঠায় নজরদারি করতে এবং স্ক্রোল করার জন্য একটি যুক্তি তৈরি করতে হয়েছিল। সবচেয়ে সুন্দর সমাধান নয় এটি আমার পক্ষে কাজ করছে।


3

আপনার এইচটিএমএলে এটি চেষ্টা করুন ( <HEAD>ট্যাগ)

<script> 
  document.ontouchmove = function(event) { event.preventDefault(); }
</script>

এটি আপনার ওয়েব পৃষ্ঠায় স্ক্রোলিং অক্ষম করবে।

(যে কোনও ওয়েবপৃষ্ঠায় কাজ করে, কেবল ইউআইবিউভিউ নয়)


2

আমাকে স্ক্রোলিং অক্ষম করা দরকার কারণ একটি কাস্টম কীবোর্ড খারিজ করা সত্যিই ওয়েবউইউয়ের সাথে স্ক্রোলিংকে বিশৃঙ্খলা করে। আর কিছুই কাজ করেনি এবং আমি এরকম কিছু নিয়ে আশ্রয় নিয়েছি:

-(void)viewDidLoad{
  [super viewDidLoad];
  [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
  self.webView.scrollView.showsVerticalScrollIndicator = NO;
}  

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){
        self.contentOffset = CGPointZero;
    }
}

1

আপনি কি চান এমন একটি ইউআইআইউইউবভিউ এবং একটি ইউআইএসক্রোলভিউতে একটি ইউআইটিএলভিউ এবং ওয়েবউউয়ের উচ্চতা (এবং স্ক্রোলভিউয়ের সামগ্রিক কন্টেন্টসাইজ যুক্ত করা) সেট করছে?


প্রায়। তবে টেবিল ভিউ শিরোনামে ওয়েবভিউ প্রদর্শন করা কম জটিল বলে মনে হচ্ছে। তবে আমার প্রশ্নটি হ'ল: আমি এসডিকে দিয়ে ওয়েবভিউ স্ক্রোলটি অক্ষম করার অনুমতি দিচ্ছি? যদি না হয় তবে আমাকে তাহাত খাত জাভাস্ক্রিপ্ট করার অনুমতি দেওয়া হয়?
jsaddour

1
[[[WebView subviews] lastObject] setScrollingEnabled:NO];

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