ইন্টারফেস বিল্ডারে WKWebView


95

দেখে মনে হচ্ছে এক্সকোড 6 বিটাতে আইবি অবজেক্ট টেমপ্লেটগুলি এখনও পুরানো স্টাইলের অবজেক্ট তৈরি করছে (আইওএসের জন্য ইউআইডাব্লুভিউ এবং ওএসএক্সের জন্য ওয়েবভিউ)। আশা করি অ্যাপল আধুনিক ওয়েবকিটের জন্য সেগুলি আপডেট করবে, তবে ততক্ষণে ইন্টারফেস বিল্ডারে ডব্লিউকেউভিউজ তৈরির সর্বোত্তম উপায় কোনটি? আমি কি একটি বেসিক ভিউ (ইউআইভিউ বা এনএসভিউ) তৈরি করতে পারি এবং এর ধরণটি WKWebView এ নির্ধারণ করব? আমি অনলাইনে যে উদাহরণগুলি খুঁজে পাই তার বেশিরভাগই এটিকে একটি কনটেইনার ভিউতে প্রোগ্রামগতভাবে যুক্ত করে; এটি কোনও কারণে ভাল?


4
এটি এখনও একটি খোলা বাগ: তালিকা. webkit.org/pipermail/webkit-unassigned/2014- সেপ্টেম্বর /…
ডেভিড এইচ

4
আমি এক্সকোড 7.2 ব্যবহার করছি, আমি বস্তুর লাইব্রেরিতে WKWebView দেখতে পাচ্ছি না। এটি এখনও পাওয়া যায় না?
user3731622

10
তবুও এক্সকোড ৮ তে উপস্থিত নেই
রায়ান বালান্টিনে

4
এক্সকোড 9.0.1 এখন আইবি-তে ডব্লিউকেউব ভিউ সমর্থন করে। এখানে সমস্ত উত্তর এখন অবচয় করা হয়েছে।
হাসিবোট

4
@ স্মাইলবট এক্সকোডের নতুন সংস্করণে ডব্লিউকেউব ভিউ রয়েছে তবে এটি আপনাকে আইওএস 11+ টার্গেট করা প্রয়োজন। crx_au উত্তর সবচেয়ে ভাল কাজ করে -> stackoverflow.com/a/40118654/757503
mikemike396

উত্তর:


70

আপনি সঠিক - এটি কাজ করবে বলে মনে হয় না। আপনি যদি শিরোনামগুলি দেখেন তবে আপনি দেখতে পাবেন:

- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;

যার দ্বারা বোঝা যাচ্ছে যে আপনি কোনও নিব থেকে ইনস্ট্যান্ট করতে পারবেন না।

আপনাকে এটি ডিভিডলোড বা লোডভিউতে হাতে হাতে করতে হবে।


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

4
প্লাস পক্ষে, কোডে এটি করার ফলে আপনাকে আইওএস 7-তে ইউআইউইউব ভিউ এবং আইওএস 8
ডব্লিউকেউইউভ

ঠিক আছে এই উত্তরের পরে, আমি মনে করি আপনি WKWebView এর একটি সাবক্লাসে এই পদ্ধতিটি ওভাররাইড করতে পারেন এবং তারপরে এটি ইন্টারফেস বিল্ডারে ব্যবহার করতে পারেন .. তবে সুপার.in.initWithCoder ছাড়াই .. আসুন পরীক্ষা করা যাক! :)
জারঘোল

4
একটি ব্যক্তিগত পরীক্ষার পরে: আপনি পারবেন না ... "
টিআইআর

4
একটি যুক্তিসঙ্গত কাজ হ'ল মাইওয়েভিউ ভিউ নামে একটি ইউআইভিউ সাবউভিউ তৈরি করা যা ডাব্লুউইউবিউউউ বা একটি ইউআইউইউব ভিউউকে একটি সাবউভি হিসাবে রূপান্তরিত করে, যা ইনটুইডকোডারটিতে রানটাইম সময়ে নির্ধারিত হয়। তারপরে আপনি আইবিতে মাই ওয়েবভিউ ভিউ তৈরি করতে পারবেন। আপনি যদি সুইফ্ট ব্যবহার করছেন, আপনি এমনকি আইবিআই স্পেসটেবল কীওয়ার্ড ব্যবহার করে আইবিতে সম্পাদনা করা যায় এমন বৈশিষ্ট্যগুলি যুক্ত করতে পারেন।
এরিকস

65

কিছু দ্বারা নির্দেশিত হিসাবে, এক্সকোড of.৪ হিসাবে, ডব্লিউকেউইউভিউ ইন্টারফেস বিল্ডারে এখনও উপলভ্য নয়। তবে কোডের মাধ্যমে এগুলি যুক্ত করা খুব সহজ।

আমি এটি আমার ভিউকন্ট্রোলারে ব্যবহার করছি। স্কিপিং ইন্টারফেস নির্মাতা

import UIKit
import WebKit

class ViewController: UIViewController {

    private var webView: WKWebView?

    override func loadView() {
        webView = WKWebView()

        //If you want to implement the delegate
        //webView?.navigationDelegate = self

        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if let url = URL(string: "https://google.com") {
            let req = URLRequest(url: url)
            webView?.load(req)
        }
    }
}

13
এই প্রশ্নটি বিশেষত ইন্টারফেস বিল্ডার সম্পর্কে, সুতরাং এই উত্তরটি খুব সহায়ক নয়।
স্টিভ ল্যান্ডি

4
তুমি ঠিক. আমার উত্তরটি শুরু করা উচিত ছিল "আপনি আইবি থেকে ডাব্লুউইউবিউভিউ তৈরি করতে পারবেন না" :) তবে আমি ডাব্লুডাব্লুডিসি থেকে "আধুনিক ওয়েবকিট এপিআই উপস্থাপন করছি" সেশন ভিডিওটি দেখছি এবং তারা এক্সকোড ব্যবহার করছে তাই আমি অনুমান করি যে এটি কেবল এমন কিছু নয় যা ' এই মুহুর্তে আমাদের জন্য উপলব্ধ।
জোহান

4
সবেমাত্র ভিডিওটি আবার পরীক্ষা করে দেখুন এবং তারা কোডে তাদের WKWebView ইনস্ট্যান্ট করছে। এটি ভিডিওটির 17:20 চিহ্নের কাছাকাছি।
অ্যাডাম ফক্স

4
এটি কীভাবে অসীম লুপ তৈরি করবে? এটি আইওএস ডকুমেন্টেশনের লোডভিউয়ের বিবরণ থেকে। "ভিউ কন্ট্রোলার যখন এই দেখানোর সম্পত্তিটির জন্য অনুরোধ করা হয় তবে বর্তমানে শূন্য থাকে তখন এই পদ্ধতিটি কল করে" "
জোহান

4
self.viewভিতরে উল্লেখloadView() করা যা অনন্ত পুনরাবৃত্তির দিকে পরিচালিত করে। সেট দৃশ্য, অপরপক্ষে, শুধুমাত্র মঞ্জুরিপ্রাপ্ত নয় কিন্তু প্রকৃতপক্ষে প্রয়োজনীয় (ম্যানুয়ালি, অথবা chaining দ্বারাsuper। অন্যথায় যতদিন দৃশ্য হিসাবে বলা হচ্ছে রাখা হবেnil)।
নিকোলাস মিয়ারি

30

তথ্য.পুলিস্ট

আপনার তথ্য.প্লেস্ট পরিবহন সুরক্ষা সেটিংসে যোগ করুন

 <key>NSAppTransportSecurity</key>
 <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
 </dict>

এক্সকোড 9.1+

ইন্টারফেস নির্মাতা ব্যবহার করে

আপনি অবজেক্ট লাইব্রেরিতে WKWebView উপাদানটি খুঁজে পেতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

সুইফট 5 দিয়ে প্রোগ্রামিয়ালি ভিউ যুক্ত করুন

let webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
view.addSubview(webView)
webView.translatesAutoresizingMaskIntoConstraints = false
webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
webView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
webView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true

সুইফট 5 (সম্পূর্ণ নমুনা) এর সাথে প্রোগ্রামগতভাবে ভিউ যুক্ত করুন

import UIKit
import WebKit

class ViewController: UIViewController {

    private weak var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        initWebView()
        webView.loadPage(address: "http://apple.com")
    }

    private func initWebView() {
        let webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
        view.addSubview(webView)
        self.webView = webView
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        webView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
        webView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true
    }
}

extension WKWebView {
    func loadPage(address url: URL) { load(URLRequest(url: url)) }
    func loadPage(address urlString: String) {
        guard let url = URL(string: urlString) else { return }
        loadPage(address: url)
    }
}

এর জন্য প্রারম্ভকালে নতুন ভিউ বরাদ্দ করা ভাল পরামর্শ নয় WebView। crx_au এর প্রতিক্রিয়া উচ্চতর
ইলিয়াস করিম

আমি কাজ করে যে অন্য কোন জিনিস খুঁজে পাই না !! সুতরাং ... যেমন আই এল আই 4 এস বলেছে এটি সম্ভবত একটি ভাল পরামর্শ নয়, আমি জানি না এটি আছে কি না তবে সঠিকভাবে কাজ করে! ধন্যবাদ মানুষ, আপনি আমার দিন বাঁচিয়েছেন !! :)
জর্জি করর্ডো

20

এক্সকোড 8 এর সাহায্যে এটি এখন সম্ভব, তবে এটি অর্জনের মাধ্যমটি বলতে গেলে সামান্যতম হ্যাকি বলা যায়। তবে ওহে, একটি কাজের সমাধান একটি কার্যনির্বাহী সমাধান, তাই না? আমাকে বিস্তারিত বলতে দাও.

ডাব্লুউইউভিউ ভিউ'র ইনিউইথকোডার: আর "এনএস_উইএনএইভিএআইএবিএলএল" হিসাবে টিকা দেওয়া হয় না। এটি এখন নিচের মত দেখায়।

- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;

WKWebView সাবক্লাসিং দিয়ে শুরু করুন এবং initWithCoder ওভাররাইড করুন। সুপার থ্রিউইথকোডারকে কল করার পরিবর্তে, আপনাকে ডিআইবিথফ্রেম: কনফিগারেশন: এর মতো আলাদা একটি ডিআইডি পদ্ধতি ব্যবহার করতে হবে। নীচে দ্রুত উদাহরণ।

- (instancetype)initWithCoder:(NSCoder *)coder
{
    // An initial frame for initialization must be set, but it will be overridden 
    // below by the autolayout constraints set in interface builder. 
    CGRect frame = [[UIScreen mainScreen] bounds];
    WKWebViewConfiguration *myConfiguration = [WKWebViewConfiguration new];

    // Set any configuration parameters here, e.g.
    // myConfiguration.dataDetectorTypes = WKDataDetectorTypeAll; 

    self = [super initWithFrame:frame configuration:myConfiguration];

    // Apply constraints from interface builder.
    self.translatesAutoresizingMaskIntoConstraints = NO;

    return self;
}

আপনার স্টোরিবোর্ডে, একটি ইউআইভিউ ব্যবহার করুন এবং এটি আপনার নতুন সাবক্লাসের একটি কাস্টম ক্লাস দিন class বাকিটি যথারীতি ব্যবসায়ের (স্বয়ংক্রিয় বিন্যাসের সীমাবদ্ধতা সেট করা, একটি নিয়ন্ত্রণকারীর আউটলেটের সাথে ভিউটি সংযুক্ত করা ইত্যাদি)।

শেষ অবধি, ডব্লিউকেউইউভিউ ইউআইওয়েবভিউতে সামগ্রী আলাদাভাবে স্কেল করে। অনেক লোক সম্ভবত WIWebView- কে এই বিষয়ে UIWebView আচরণকে আরও ঘনিষ্ঠভাবে অনুসরণ করতে ডাব্লুকেউব ভিউ যেমন আরও বেশি ঘনিষ্ঠভাবে অনুসরণ করতে ইউআইউইউবভিউয়ের মত একই পরিমাণে রেন্ডার করার জন্য ডাব্লুকেউবিউ ভিউ-তে সাধারণ পরামর্শটি অনুসরণ করতে চান তারা সম্ভবত একই ধরণের বিবরণে রেকর্ড করতে পারেন।


4
এটি self = [super initWithFrame:myFrame configuration:myConfiguration];যদি আপনি প্রতিবন্ধকতা ব্যবহার করেন তবে এটিও পড়তে হবেself.translatesAutoresizingMaskIntoConstraints = NO;
মোজো66

প্রধান পর্দার সীমানা স্থানধারক ফ্রেম হিসাবে ব্যবহার না করে আপনি আমাদের সিজিআরেক্টজেরোও করতে পারেন এবং নিজেকে কিছু কোড সংরক্ষণ করতে পারেন।
ইলিয়াস করিম

সুন্দর সমাধান। ভাল কাজ করে.
রায়ফ্লেক

নির্দোষভাবে কাজ করে! স্টোরিবোর্ডে ডব্লিউকেউব ভিউ সীমাবদ্ধতা পেতে আইওএস 11 কে টার্গেট না করার জন্য দুর্দান্ত ফিক্স।
mikemike396

20

Crx_au এর দুর্দান্ত উত্তরের উপর ভিত্তি করে এখানে একটি সাধারণ সুইফট 3 সংস্করণ ।

import WebKit

class WKWebView_IBWrapper: WKWebView {
    required convenience init?(coder: NSCoder) {
        let config = WKWebViewConfiguration()
        //config.suppressesIncrementalRendering = true //any custom config you want to add
        self.init(frame: .zero, configuration: config)
        self.translatesAutoresizingMaskIntoConstraints = false
    }
}

ইন্টারফেস বিল্ডারে একটি ইউআইভিউ তৈরি করুন, আপনার প্রতিবন্ধকতাগুলি নির্ধারণ করুন এবং এটি WKWebView_IBWrapperকাস্টম ক্লাস হিসাবে নির্ধারণ করুন :

ইউটিলিটিস -> পরিচয় পরিদর্শক ট্যাব [1]


দুর্দান্ত উত্তর
আমর হোসাম

6

আপনি যদি এখনও এক্সকোডের সাম্প্রতিক সংস্করণগুলিতে অর্থাৎ v9.2 + এ এই সমস্যার মুখোমুখি হন তবে কেবল আপনার ভিউকন্ট্রোলারে ওয়েবকিট আমদানি করুন:

#import <WebKit/WebKit.h>
  1. ঠিক করার আগে: এখানে চিত্র বর্ণনা লিখুন

  2. ঠিক করার পরে:

এখানে চিত্র বর্ণনা লিখুন


4

এটি এখন আপাতদৃষ্টিতে এক্সকোড 9 বি 4 এ স্থির করা হয়েছে। রিলিজ নোটগুলি বলে যে "ডাব্লুকেউইভভিউ আইওএস বস্তুর লাইব্রেরিতে উপলব্ধ।"

এর জন্য আইওএস 11 লাগবে কিনা বা পশ্চাদপটে সামঞ্জস্যপূর্ণ কিনা তা আমি এখনও গভীরভাবে দেখিনি।


আমি নিশ্চিত করতে পারি যে এটি কাজ করে! হুররে! এটি ম্যাকোস স্টোরিবোর্ডগুলিতেও কাজ করে (কমপক্ষে অ্যাপ্লিকেশনগুলিকে ম্যাকোস 10.13+ টার্গেট করে)।
ক্লিফটন ল্যাব্রাম

1

আপনি এক্সকোড 9 সাল থেকে আইবিতে একটি WKWebView ইনস্ট্যান্টেট এবং কনফিগার করতে পারেন, কোডে এটি করার দরকার নেই। এখানে চিত্র বর্ণনা লিখুন

নোট করুন যে আপনার স্থাপনার লক্ষ্যটি আইওএস 10 এর চেয়ে বেশি হতে হবে অথবা আপনি একটি সংকলন-সময় ত্রুটি পাবেন।

এখানে চিত্র বর্ণনা লিখুন




0

নিশ্চিত না যে এটি সাহায্য করে তবে আমি লক্ষ্যটির জন্য ওয়েবকিট কাঠামোটি অন্তর্ভুক্ত করে আমার জন্য সমস্যাটি সমাধান করেছি। এটি কেবল রেফারেন্সটিকে লিঙ্ক করে না আমি এখনও আইবিতে ওয়েবভিউজ অবজেক্টটি ব্যবহার করি এবং এটিকে এম্বেড করে রাখছি এমন ভিউকন্ট্রোলারে রেখে দিন এবং আমার কখনও সমস্যা হয়নি ...

আমি এখন 4 টি ডব্লিউকেউইভিউ ম্যাকোস প্রকল্পে কাজ করেছি এবং ওয়েবভিউ প্রতিটি প্রকল্পে সঠিকভাবে কাজ করেছে।


-14

এটি আমার জন্য এক্সকোড .2.২ এ কাজ করেছে ...

প্রথমে স্টোরিবোর্ড / আইবিতে ইউআইউইউব ভিউ আউটলেট হিসাবে ওয়েব ভিউ যুক্ত করুন। এটি আপনাকে এর মতো সম্পত্তি দেবে:

@property (weak, nonatomic) IBOutlet UIWebView *webView;

তারপরে আপনার কোডটি ডাব্লুউইউবিউ ভিউতে পরিবর্তন করতে কেবল সম্পাদনা করুন।

@property (weak, nonatomic) IBOutlet WKWebView *webView;

আইডেন্টিটি ইন্সপেক্টরটিতে আপনার কাস্টম ক্লাসটি ডব্লিউকেউব ভিউতে পরিবর্তন করা উচিত।


আমি এটি একটি ওএস এক্স প্রকল্পের সাহায্যে চেষ্টা করেছিলাম - যা কাজ করে না, সুতরাং এটি আইওএসের জন্য বিশেষ ক্ষেত্রে হওয়া উচিত।
henrikstroem

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