ios - কিভাবে UIViewController এর দৃশ্য দৃশ্যমান হয় তা কিভাবে বলা যায়




(10)

আপনার জন্য যারা উত্তরটির একটি সুইফ্ট 2.2 সংস্করণের খোঁজ করছেন:

if self.isViewLoaded() && (self.view.window != nil) {
     // viewController is visible
}

এবং সুইফ্ট 3 :

if self.isViewLoaded && (self.view.window != nil) {
         // viewController is visible
}

আমি অনেক মতামত সঙ্গে, একটি ট্যাব বার আবেদন আছে। একটি নির্দিষ্ট UIViewController বর্তমানে UIViewController মধ্যে থেকে দৃশ্যমান কিনা তা জানতে একটি উপায় আছে? (একটি সম্পত্তি খুঁজছেন)


আপনি UITabBarController এর selectedViewController UITabBarController সম্পত্তিটি ব্যবহার করতে চান। ট্যাব বার কন্ট্রোলারের সাথে সংযুক্ত সকল দৃশ্য কন্ট্রোলার একটি tabBarController কন্ট্রোলার সম্পত্তি সেট থাকে, তাই আপনি যেকোনো ভিউ কন্ট্রোলার কোডের মধ্যে থেকে পারেন:

if([[[self tabBarController] selectedViewController] isEqual:self]){
     //we're in the active controller
}else{
     //we are not
}

আপনি যদি কোনও ন্যাভিগেশন নিয়ামক ব্যবহার করেন এবং শুধুমাত্র সক্রিয় এবং শীর্ষস্থানীয় নিয়ামক হিসাবে আছেন কিনা তা জানতে চান তবে ব্যবহার করুন:

if navigationController?.topViewController == self {
    // Do something
}

এই উত্তর @mattdipasquale এর মন্তব্য উপর ভিত্তি করে।

যদি আপনার আরো জটিল দৃশ্যকল্প থাকে তবে উপরের অন্যান্য উত্তরগুলি দেখুন।


আমার উদ্দেশ্যের জন্য, কন্টেইনার ভিউ কন্ট্রোলার প্রেক্ষাপটে, আমি এটি খুঁজে পেয়েছি

- (BOOL)isVisible {
    return (self.isViewLoaded && self.view.window && self.parentViewController != nil);
}

ভাল কাজ করে.


আমি @ প্রোগর্মরের উত্তরের উপর ভিত্তি করে একটি দ্রুত বর্ধিত এক্সটেনশান তৈরি করেছি।

এটি একটি UIViewController যাতে স্ক্রিনে থাকে কিনা তা সহজেই চেক করতে দেয়:

if someViewController.isOnScreen {
    // Do stuff here
}

প্রসার:

//
//  UIViewControllerExtension.swift
//

import UIKit

extension UIViewController{
    var isOnScreen: Bool{
        return self.isViewLoaded() && view.window != nil
    }
}

আমি একটি মডেল উপস্থাপন দৃশ্য নিয়ামক জন্য ব্যবহৃত পদ্ধতির উপস্থাপন নিয়ন্ত্রক শ্রেণীর পরীক্ষা ছিল। উপস্থাপিত দৃশ্য নিয়ামক যদি ViewController2 তবে আমি কিছু কোড কার্যকর করব।

UIViewController *vc = [self presentedViewController];

if ([vc isKindOfClass:[ViewController2 class]]) {
    NSLog(@"this is VC2");
}

এক্সকোড 6.4, আইওএস 8.4, এআরসি সক্রিয়

অবশ্যই এটা করার উপায় প্রচুর। আমার জন্য কাজ করেছে যে এক নিম্নলিখিত ...

@property(nonatomic, readonly, getter=isKeyWindow) BOOL keyWindow

এই যে কোন ভিউ কন্ট্রোলার ব্যবহার করা যাবে নিম্নলিখিত ভাবে,

[self.view.window isKeyWindow]

আপনি যদি এই সম্পত্তিটি কল করেন -(void)viewDidLoad আপনি 0 পেতে পারেন, তবে আপনি যদি পরে এটি কল করেন -(void)viewDidAppear:(BOOL)animated আপনাকে 1 পেতে পারে।

এই কেউ সাহায্য করে আশা করি। ধন্যবাদ! চিয়ার্স।


এখানে একটি UIViewController বিভাগ হিসাবে @ প্রোগ্রামার এর সমাধান:

// UIViewController+Additions.h

@interface UIViewController (Additions)

- (BOOL)isVisible;

@end


// UIViewController+Additions.m

#import "UIViewController+Additions.h"

@implementation UIViewController (Additions)

- (BOOL)isVisible {
    return [self isViewLoaded] && self.view.window;
}

@end

দৃশ্যটি বর্তমানে দৃশ্যমান হলে দৃশ্যের উইন্ডো সম্পত্তিটি অ-নীল হয়, তাই ভিউ কন্ট্রোলারের প্রধান দৃশ্যটি দেখুন:

[সম্পাদনা] view পদ্ধতিটি আমন্ত্রণের কারণে দৃশ্যটি লোড হতে পারে (যদি এটি লোড হয় না) যা অপ্রয়োজনীয় এবং অযাচিত হতে পারে। এটি ইতিমধ্যে লোড করা হয় কিনা তা দেখতে প্রথম চেক করা ভাল হবে। আমি এই সমস্যা এড়াতে isViewLoaded থেকে কল যোগ করেছি।

if (viewController.isViewLoaded && viewController.view.window) {
    // viewController is visible
}

অথবা যদি আপনার ভিউ কন্ট্রোলার পরিচালনার একটি UINavigationController থাকে তবে আপনি তার পরিবর্তে visibleViewController ভিউ কন্ট্রোলার সম্পত্তিটি পরীক্ষা করতে পারেন।

এছাড়াও, আইফোনের 9-এ সুইফ্টে (বা পরে):

if viewController.viewIfLoaded?.window != nil {
    // viewController is visible
}

ভিউ কন্ট্রোলার বর্তমান কন্ট্রোল কন্ট্রোলার কিনা তা যাচাই করার জন্য আমার এটি দরকার ছিল, কোনও উপস্থাপক ভিউ কন্ট্রোলার আছে কিনা বা নাভিগেটর দিয়ে ধাক্কা দিয়ে আমি এটি করেছি, আমি এমন কোনও সমাধান প্রয়োজন হলে পোস্ট করছি:

if presentedViewController != nil || navigationController?.topViewController != self {
      //Viewcontroller isn't viewed
}else{
     // Now your viewcontroller is being viewed 
}




uiviewcontroller