আইফোনের প্রতিকৃতিতে ইউআইএসপ্লিটভিউ কনট্রোলার মাস্টারের পরিবর্তে বিশদ ভিসি দেখায়


177

আমি এক্সকোড 6-তে একটি ইউনিভার্সাল স্টোরিবোর্ড ব্যবহার করছি, আইওএস 7 এবং ততোধিক লক্ষ্যবস্তু করছি। আমি UISplitViewControllerএমন একটি বাস্তবায়ন করেছি যা এখন আইওএস চলমান আইফোন 8 এ স্থানীয়ভাবে সমর্থিত এবং এক্সকোড এটি স্বয়ংক্রিয়ভাবে আইওএস 7 এর জন্য ব্যাকপোর্ট করবে 7 এটি আইওএস 8 এ চলমান আইওএস 8 এর প্রতিকৃতিতে আইফোনটিতে অ্যাপ্লিকেশনটি চালু না করে বাদ দিলে বিভক্ত দৃশ্যের বিশদ দৃশ্য কন্ট্রোলার প্রদর্শিত হয় যখন আমি প্রথম মাস্টার ভিউ কন্ট্রোলারটি দেখতাম। আমি বিশ্বাস করি এটি আইওএস 8 এর সাথে একটি বাগ ছিল কারণ আপনি যখন আইওএস 7 এ অ্যাপটি চালাবেন, এটি সঠিকভাবে মাস্টার ভিউ নিয়ন্ত্রণকারী দেখায়। তবে আইওএস 8 এখন জিএম এবং এটি এখনও ঘটছে। আমি কীভাবে এটি সেট আপ করতে পারি যাতে স্প্লিট ভিউ কন্ট্রোলার ভেঙে পড়তে চলেলে (স্ক্রিনে কেবলমাত্র একটি দৃশ্য নিয়ামক প্রদর্শিত হয়), যখন বিভাজন দর্শনীয় নিয়ামক প্রদর্শিত হয়, তখন এটি মাস্টার ভিউ নিয়ন্ত্রণকারীকে বিশদ নয়?

আমি ইন্টারফেস বিল্ডারে এই স্প্লিট ভিউ কন্ট্রোলার তৈরি করেছি। স্প্লিট ভিউ কন্ট্রোলার হ'ল একটি ট্যাব বার নিয়ামকের মধ্যে প্রথম দেখা নিয়ন্ত্রক। মাস্টার এবং বিশদ ভিসি উভয়ই অভ্যন্তরে এমবেড থাকা টেবিল ভিউ নিয়ন্ত্রণকারী সহ নেভিগেশন কন্ট্রোলার।

উত্তর:


238

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

কিছু পোস্ট আমি দেখেছি যে, যে সুপারিশ সমাধান নতুন বাস্তবায়ন হয় আছে primaryViewControllerForCollapsingSplitViewController:উপর পদ্ধতি UISplitViewControllerDelegate। আমি চেষ্টা করেছিলাম কোন লাভ হয়নি। অ্যাপল যে মাস্টার-ডিটেইল টেম্পলেটটিতে কাজ করে বলে মনে হচ্ছে সেগুলি নতুন প্রয়োগ করে (এই splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:সমস্তটি বলতে গভীর নিঃশ্বাস নিন) ডেলিগেট পদ্ধতি (আবার চালু UISplitViewControllerDelegate)। ডক্স অনুসারে , এই পদ্ধতি:

ডেলিগেটকে প্রাথমিক ভিউ কন্ট্রোলারকে সামঞ্জস্য করতে এবং ধসে পড়া ইন্টারফেসে গৌণ ভিউ কন্ট্রোলারকে অন্তর্ভুক্ত করতে বলে।

আরও সুনির্দিষ্ট বিশদের জন্য সেই পদ্ধতির আলোচনার অংশটি পড়তে ভুলবেন না।

অ্যাপল যেভাবে এটি পরিচালনা করে তা হ'ল:

- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
  ontoPrimaryViewController:(UIViewController *)primaryViewController {

    if ([secondaryViewController isKindOfClass:[UINavigationController class]]
        && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
        && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {

        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return YES;

    } else {

        return NO;

    }
}

এই প্রয়োগটি মূলত নিম্নলিখিতগুলি করে:

  1. secondaryViewControllerআমরা যদি (ক UINavigationController) যা প্রত্যাশা করি তা যদি হয় এবং এটি আমরা কী প্রত্যাশা করে তা দেখায় (এ DetailViewController- আপনার দৃশ্য নিয়ামক), তবে কোনও মডেল ( detailItem) নেই, তবে " Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded."
  2. অন্যথায়, " NOস্প্লিট ভিউ কন্ট্রোলারকে ভেঙে যাওয়া ইন্টারফেসে সেকেন্ডারি ভিউ কন্ট্রোলারের সামগ্রীটি চেষ্টা করতে এবং সংযুক্ত করতে " ফিরে যান "

প্রতিকৃতিতে আইফোনের জন্য ফলাফলগুলি নিম্নলিখিত (প্রতিকৃতিতে শুরু করা বা প্রতিকৃতিতে ঘোরানো - অথবা আরও নির্ভুলভাবে কমপ্যাক্ট আকারের শ্রেণীর):

  1. আপনার মতামত যদি সঠিক হয়
    • এবং একটি মডেল আছে, বিস্তারিত দেখুন নিয়ামক প্রদর্শন করুন
    • তবে কোনও মডেল নেই, মাস্টার ভিউ কন্ট্রোলার দেখান
  2. আপনার মতামত যদি সঠিক না হয়
    • মাস্টার ভিউ কন্ট্রোলার দেখান

কাদা হিসাবে পরিষ্কার।


8
চমত্কার উত্তর! আমি কেবল সাবক্লাস করেছি UISplitViewControllerএবং সর্বদা YESসেই পদ্ধতি থেকে ফিরে আসি , তারপরে কেবল স্টোরিবোর্ডে স্প্লিট ভিউ ক্লাসটি পরিবর্তন করেছি, যেমন আমি সর্বদা পোর্ট্রেটে আইফোনে মাস্টারটি দেখাতে চাই। :)
জর্দান এইচ

2
আমি চাই "আইফোন" "প্রতিকৃতি" মোডে থাকলে আমার মাস্টার ভিউ কন্ট্রোলারটি লুকানো থাকে কারণ আমার ডিফল্ট বিবরণ ভিউ কন্ট্রোলার সেটআপ রয়েছে। আমি এটা কিভাবে করবো. আমার মাস্টার এবং বিস্তারিত উভয়ই ভিসির ধরণের। বিশেষত আমার বিশদটি এমএমড্রাওয়ারকন্ট্রোলার। দয়া করে সহায়তা করুন
হর্ষিত গুপ্ত 20

3
আমি জোয়ের সাবক্লাসিংয়ের পরামর্শটি চেষ্টা করেছিলাম UISplitViewControllerকিন্তু দেখেছি এটি কার্যকর হয়নি: splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:কখনই ডাকা হয়নি। পরিবর্তে আমি অ্যাপলের টেমপ্লেটটি অনুলিপি করে অ্যাপডেলিগেটে রেখেছি। এটি application didFinishLaunchingWithOptions:পাশাপাশি ইউআইএসপ্লিটভিউ কনট্রোলার তৈরি করার ক্ষেত্রে কয়েকটি পরিবর্তন প্রয়োজন (যেখানে আমি অ্যাপলের টেম্পলেটটিও অনুলিপি করেছি)।
নিক

7
@ জো-এর মন্তব্য সেলফ.ডিলেগেট = স্ব নির্ধারণের সাথে কাজ করে; ভিউডিডলোডে! এবং .উ থানকিউতে <ইউআইএসপ্লিটভিউ কনট্রোলারডেলিগেট> যুক্ত করুন!
ফেলো ওয়ার্ল্ডসিটিয়েন

2
এটি আমার কাছে সঠিক উত্তর বলে মনে হচ্ছে, ঠিক যেমন আমি একই সমস্যা করছি। যাইহোক, কিছু কারণে আমার splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:কখনই ডাকা হয় না। মনে হচ্ছে প্রতিনিধি আমার অ্যাপের প্রতিনিধিটির applicationDidFinishLaunchingWithOptions:পদ্ধতিটি সঠিকভাবে সেট করছে set অন্য কেউ এই সমস্যাটি দেখেছেন এবং সমাধানের কাজটি করেন নি?
টিম ডিন

60

সুইফটে গৃহীত উত্তর এখানে। কেবলমাত্র এই সাবক্লাসটি তৈরি করুন এবং এটি আপনার স্টোরিবোর্ডে আপনার স্প্লিটভিউকন্ট্রোলারকে অর্পণ করুন।

//GlobalSplitViewController.swift

import UIKit

class GlobalSplitViewController: UISplitViewController, UISplitViewControllerDelegate {

  override func viewDidLoad() {
    super.viewDidLoad()

    self.delegate = self
  }

  func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController!, ontoPrimaryViewController primaryViewController: UIViewController!) -> Bool{
    return true
  }

}

3
দুর্দান্ত, এটি অনেক সাহায্য করে। তবে একটি নতুন সমস্যা দেখা দিল। আমাকে মাস্টারের কাছে নিয়ে যাওয়া ব্যাকবটনটি এখন অদৃশ্য হয়ে যায় (কখনই দেখাবে না)। আমি কিভাবে এটি ফেরত পেতে পারি? সম্পাদনা: কিছু মনে করবেন না, নিজেকে আবিষ্কার করেছেন :-)। অন্যান্য ব্যবহারকারীর জন্য: বিশদতে এটি যুক্ত করুন দেখুন: সেলিব্রেশনআইটেমটিফট বার আইটোন = স্ব.স্প্লিটভিউ কনট্রোলার? .ডিসপ্লেমোডবটন আইটেম () সেলো-নেভিগেশন আইটেমলিটআইটেমসপ্লিমেন্টব্যাকবটন = সত্য
টম টালাক সলবু

3
এখন func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
সুইফটে

2
দেখে মনে হয় শ্রেণিবদ্ধ আকারটি কমপ্যাক্ট হলেই ডেলিগেট পদ্ধতিটি ডাকা হয়। এটি আইফোনে কল করা হচ্ছে, তবে আইপ্যাডের প্রতিকৃতিতে নয়, যার অর্থ এটি সমস্যার সমাধান করে না, যেহেতু আইপ্যাড প্রতিকৃতিটি ধসে পড়েছে মোডে। আইওএস 12.1 এর সাথে পরীক্ষিত
ড্যানিয়েল

21

মার্ক এস এর সঠিক উত্তরটির দ্রুততম সংস্করণ

যেমন অ্যাপলের মাস্টার-বিশদ টেম্পলেট সরবরাহ করেছে।

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController:UIViewController, ontoPrimaryViewController primaryViewController:UIViewController) -> Bool {
    guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }
    guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }
    if topAsDetailController.detailItem == nil {
        // Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return true
    }
    return false
}

শোধন

(মার্ক এস যা বলেছিলেন তা কিছুটা বিভ্রান্তিকর)

এই প্রতিনিধি পদ্ধতি বলা হয় splitViewController: collapseSecondaryViewController: ontoPrimaryViewController: , কারণ এটি এটি করে। যখন আরও কমপ্যাক্ট প্রস্থের আকারে পরিবর্তন করা হয় (উদাহরণস্বরূপ ফোনটি ল্যান্ডস্কেপ থেকে প্রতিকৃতিতে ঘোরানোর সময়), কেবলমাত্র সেগুলির মধ্যে একটিতে স্প্লিট ভিউ কন্ট্রোলারকে ভেঙে ফেলা দরকার।

এই ফাংশনটি বুলিয়ানকে সিদ্ধান্ত দেয় যে এটি ডিটেইলটি ভেঙে দেবে এবং মাস্টারকে প্রদর্শিত হবে কিনা decide

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

এটাই.


আমি কেন @ এসচের সম্পাদনা থেকে পিছনে ফিরেছি তা স্পষ্ট করার জন্য। এই কোডটি একটি উদ্ধৃতি Apple's Master-Detail template, এটি দুর্দান্ত বা সংক্ষিপ্ত হওয়ার উদ্দেশ্য নয়, কেবল সত্য। :)
নিসস্ক্রিপ্ট

10

ডকুমেন্টেশন থেকে আপনার "উইন্ডোজ ইন্টারফেস" (অর্থাত্ আপনার ক্ষেত্রে "প্রতিকৃতি মোড") এর বিশদ দৃষ্টিভঙ্গিটি অন্তর্ভুক্ত UISplitViewController না করার জন্য আপনার প্রতিনিধি ব্যবহার করতে হবে use সুইফট 4-তে, এর জন্য বাস্তবায়নের জন্য প্রতিনিধি পদ্ধতির নাম বদলে দেওয়া হয়েছে:

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool {
    return true
}

9

আমার অ্যাপটি সুইফট ২.x তে লেখা ছিল এবং এটি ভালভাবে চলতে পারে। এটিকে সুইফট 3.0 এ রূপান্তর করার পরে (এক্সকোড রূপান্তরকারী ব্যবহার করে), এটি প্রতিকৃতি মোডে মাস্টার না করে প্রথমে বিশদ প্রদর্শন শুরু করে। সমস্যাটি হ'ল ফাংশনটির নাম স্প্লিটভিউ কনট্রোলারটি ইউআইএসপ্লিটভিউকন্ট্রোলারডেলিগেটের নতুনটির সাথে মেলে না।

ম্যানুয়ালি এই ফাংশনটির নাম পরিবর্তন করার পরে, আমার অ্যাপ্লিকেশন এখন সঠিকভাবে কাজ করতে পারে:

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool {
    guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }
    guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }
    if topAsDetailController.game == nil {
        // Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return true
    }
    return false
}

আপনার মতোই আমারও সমস্যা হচ্ছে, তবে আমি আপনার সমাধানটি বুঝতে পারি না। আপনার এখানে পোস্ট করা কোডটিতে আমি কোনও পরিবর্তন দেখছি না। আপনি আরো নির্দিষ্ট হতে পারে. ধন্যবাদ
বাইবেসী

অনেক পদ্ধতি সামান্য নামকরণ করা হয়।
ডেভ

টনির উত্তরটি হ'ল @ নিনোস্ক্রিপ্টের জবাবের সুইফট 3 সিনট্যাক্স (যা পূর্ববর্তী সুইফ্ট সংস্করণগুলির জন্য লেখা)
হ্যালোজেফি

2
দ্রুতগতি 3 জন্য, লাগাতে ভুলবেন না self.delegate = selfউপর viewDidLoadপদ্ধতি।
ফের

8
   #import <UIKit/UIKit.h>

    @interface SplitProductView : UISplitViewController<UISplitViewControllerDelegate>




    @end

.m:

#import "SplitProductView.h"
#import "PriceDetailTableView.h"

@interface SplitProductView ()

@end

@implementation SplitProductView

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.delegate = self;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/
- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
  ontoPrimaryViewController:(UIViewController *)primaryViewController {

    if ([secondaryViewController isKindOfClass:[UINavigationController class]]
        && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[PriceDetailTableView class]]

        //&& ([(PriceDetailTableView *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)

        ) {

        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return YES;

    } else {

        return NO;

    }
}
@end

7

যদি আপনার কাছে ডিফল্ট মানগুলি বিশদরূপে নিয়ন্ত্রকটি প্রদর্শনের জন্য না থাকে তবে আপনি কেবল স্ট্রিটভিউ কনট্রোলার এবং স্টোরি বোর্ডে আপনার বিশদ ইউআইভিউকন্ট্রোলারের মধ্যে ডিফল্ট সেগটিকে কেবল মুছতে পারেন। এটি সর্বদা মাস্টার ভিউ কন্ট্রোলারে প্রথমে যায়।

এর পার্শ্ব প্রতিক্রিয়া হ'ল ল্যান্ডস্কেপে দুটি ভিউ দেখার পরিবর্তে, আপনি স্প্লিটভিউ কনট্রোলারের সম্পূর্ণ আকারে একটি দৃশ্য দেখতে পাবেন যতক্ষণ না মাস্টার ভিউ নিয়ন্ত্রকের বরখাস্তে ডিটেইল সেগু শো হয় না।


ভাল কৌশল। আমার অ্যাপ্লিকেশনটি কেবল প্রতিকৃতি মোডে রয়েছে এবং আমি এটি করতে পারি।
পিসমুন 21

ল্যান্ডস্কেপ ওরিয়েন্টেশন ব্যতীত এটি সত্য, আপনি দেখতে পাবেন খালি ডান অংশটি সম্ভবত ধূসর রঙে পূর্ণ।
ওয়েদারানো

4

সিএস 193 পি এর শুক্রবার বিভাগটি খুঁজে পাওয়া যায়নি এমন সমস্ত লোকের জন্য:

সুইফ্ট ৩.১.১-এ ইউআইএসপ্লিটভিউ কনট্রোলারের একটি সাবক্লাস তৈরি করা এবং এর একটি প্রতিনিধি পদ্ধতি বাস্তবায়ন আমার জন্য কবজির মতো কাজ করেছে:

class MainSplitViewController: UISplitViewController, UISplitViewControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
}

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
    return true
} }

আমার স্টোরিবোর্ড


@ অলিটো যেমন উল্লেখ করেছেন যে, সুইফট 4-এ এর বাক্য public func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool
গঠনটি

3

আমার মতে আপনার এই সমস্যাটি আরও সাধারণ সমাধান করা উচিত। আপনি ইউআইএসপ্লিটভিউ কন্ট্রোলারকে সাবক্লাস করতে এবং এমবেড করা ভিউ কন্ট্রোলারে একটি প্রোটোকল প্রয়োগ করতে পারেন।

class MasterShowingSplitViewController: UISplitViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }
}

extension MasterShowingSplitViewController: UISplitViewControllerDelegate {
    func splitViewController(splitViewController: UISplitViewController,
                             collapseSecondaryViewController secondaryViewController: UIViewController,
                             ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
        guard let masterNavigationController = primaryViewController as? UINavigationController,
                  master = masterNavigationController.topViewController as? SplitViewControllerCollapseProtocol else {
            return true
        }
        return master.shouldShowMasterOnCollapse()

    }
}

protocol SplitViewControllerCollapseProtocol {
    func shouldShowMasterOnCollapse() -> Bool
}

ইউআইটিএবলভিউ কনট্রোলারের ক্ষেত্রে বাস্তবায়ন উদাহরণ:

extension SettingsTableViewController: SplitViewControllerCollapseProtocol {
    func shouldShowMasterOnCollapse() -> Bool {
        return tableView.indexPathForSelectedRow == nil
    }
}

আশা করি এটা সাহায্য করবে. সুতরাং আপনি এই ক্লাসটি পুনরায় ব্যবহার করতে পারেন এবং কেবল একটি প্রোটোকল প্রয়োগ করতে হবে।


প্রতিনিধি পদ্ধতিতে কখনই ডাকা হয় না!
কে_মোহিত

এটি আইপ্যাড এবং আইফোন 6/7/8 প্লাসে কল করা হয় না। এটা কি আপনার সমস্যা? : একটি সময়ে কটাক্ষপাত আছে stackoverflow.com/questions/29767614/...
Maik639

2

আপনার যখন মাস্টার থেকে শুরু করার দরকার হয় কেবল তখনই স্প্লিটভিউ কন্ট্রোলারগুলি থেকে ডিটেলভিউ নিয়ন্ত্রণকারীকে সরিয়ে দিন।

UISplitViewController *splitViewController = (UISplitViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SETTINGS"];
splitViewController.delegate = self;
[self.navigationController presentViewController:splitViewController animated:YES completion:nil];
if (IPHONE) {
    NSMutableArray * cntlrs = [splitViewController.viewControllers mutableCopy];
    [cntlrs removeLastObject];
    splitViewController.viewControllers = cntlrs;
}

2

এটি আমার জন্য আইওএস -11 এবং সুইফট 4 এ কাজ করেছে:

//Following code in application didFinishLaunching (inside Application Delegate)
guard let splitViewController = window?.rootViewController as? UISplitViewController,
            let masterNavVC = splitViewController.viewControllers.first as? UINavigationController,
            let masterVC = masterNavVC.topViewController as? MasterViewController
else { fatalError() }
splitViewController.delegate = masterVC

//Following code in MasterViewController class
extension MasterViewController:UISplitViewControllerDelegate {
    func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
        return true
    }
}

2

ফাংশনটির নাম সুইফটের নতুন সংস্করণে করা হয়েছে, সুতরাং এই কোডটি সুইফট 4 এ কাজ করে:

import UIKit

class GlobalSplitViewController: UISplitViewController, UISplitViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
        return true
    }

}

0

জামারিন / সি # সমাধান

public partial class MainSplitViewController : UISplitViewController
{
    public MainSplitViewController(IntPtr handle) : base(handle)
    {
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        Delegate = new MainSplitViewControllerDelegate();
    }
}

public class MainSplitViewControllerDelegate : UISplitViewControllerDelegate
{
    public override bool CollapseSecondViewController(UISplitViewController splitViewController, UIViewController secondaryViewController, UIViewController primaryViewController)
    {
        return true;
    }
}

0

শুধু সেট preferredDisplayModeসম্পত্তির UISplitViewControllerকরতে.allVisible

class MySplitViewController: UISplitViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.preferredDisplayMode = .allVisible
    }

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