একটি ট্যাববার ট্যাব দৃশ্যে প্রোগ্রামিকভাবে স্যুইচ করছেন?


159

ধরা যাক UIButtonআমার আইফোন অ্যাপ্লিকেশনটিতে আমার একটি ইন ট্যাব ভিউ রয়েছে এবং আমি এটির ট্যাব বারটিতে একটি আলাদা ট্যাব খুলতে চাই TabBarController। এটি করার জন্য আমি কীভাবে কোডটি লিখব?

আমি ধরে নিচ্ছি যে আমি বিদ্যমান ভিউটি আনলোড এবং একটি নির্দিষ্ট ট্যাব ভিউ লোড করছি, তবে ঠিক কীভাবে কোডটি লিখবেন তা নিশ্চিত নই।


: আমি উপরের পদ্ধতিগুলি, বলছি আমার [প্রশ্ন] সাহায্যের [1] [1] সংক্রান্ত সমস্যা রয়েছে stackoverflow.com/questions/19742416/...
রোমান Simenok

উত্তর:


399

এই কোডটি সুইফট বা অবজেক্টিভ-সি তে চেষ্টা করে দেখুন

দ্রুতগতি

self.tabBarController.selectedIndex = 1

উদ্দেশ্য গ

[self.tabBarController setSelectedIndex:1];

8
মনে রাখবেন, সূচকটি যদি আরও ভিউ নিয়ন্ত্রকের মধ্যে কোনও ট্যাবে মানচিত্র দেয় (আপনার পাঁচটি বেশি ট্যাব থাকা উচিত) তবে এটি কাজ করবে না। সেক্ষেত্রে ব্যবহার করুন -setSelectedViewController:
জো

আমি এটি করার পরে এবং এটি সফলভাবে ট্যাবগুলিকে পরিবর্তন করার পরে, আমি আর ট্যাব বারটি সাধারণত নির্বাচন করতে পারি না। আপডেট: আমি প্রোগ্রামটিমে ট্যাবগুলি অদলবদলের ঠিক আগে পপটোরআরটভিউ কনট্রোলারকে কল করার সাথে এটি সম্পর্কিত ছিল।
অ্যাডাম জনস

তবে ট্যাবটি স্যুইচ করতে চাইলে কীভাবে স্ব স্ব কাজ করবে। আসুন আমি বলি যে আমি ট্যাব 3 ক্লিক করেছি এবং সতর্কতা দেখুন এখনই ব্যবহারকারী হিসাবে টিপুন, আমি আবার ট্যাব 1 এ যেতে চাই। স্বয়ং বর্তমান এটি না হিসাবে সঠিক হবে না। সঠিক?
এ Alix

এটি ভালভাবে কাজ করে তবে ট্যাবগুলি স্যুইচ করার সময় আমাকেও ডেটা পাস করতে হবে। আমি যে ট্যাবটিতে স্যুইচ করেছি সেখানে একটি লেবেল পেয়েছি যা ট্যাবটি স্যুইচ করার সাথে সাথেই আপডেট করা দরকার! এর কোন সহজ সমাধান?
মোঃ রইস

@ অ্যাডাম জোনস আপনি কীভাবে আপনার সমস্যার সমাধান করতে পারেন? এটি দেশীয় ট্যাববারের মতো আচরণ করার জন্য। এটি দ্বিতীয় ক্লিকের রুটভিউকন্ট্রোলারে পপ করা উচিত।
ওয়াকাস

20

মনে রাখবেন যে ট্যাবগুলি 0 থেকে শুরু করে সূচী করা হয় ni সুতরাং নিম্নলিখিত কোড স্নিপেট কাজ করে

tabBarController = [[UITabBarController alloc] init];
.
.
.
tabBarController.selectedViewController = [tabBarController.viewControllers objectAtIndex:4];

বারে পঞ্চম ট্যাবে যায়।


12

আমার মতামতটি হল selectedIndexবা ব্যবহার objectAtIndexকরা ট্যাবটি স্যুইচ করার সর্বোত্তম উপায় নয়। আপনি যদি আপনার ট্যাবগুলিকে পুনরায় অর্ডার করেন তবে একটি হার্ড কোডিং সূচক নির্বাচন আপনার পূর্ববর্তী অ্যাপ্লিকেশন আচরণের সাথে বিশৃঙ্খল হতে পারে।

আপনি যে ভিউ কন্ট্রোলারে স্যুইচ করতে চান তার অবজেক্ট রেফারেন্স থাকলে আপনি এটি করতে পারেন:

tabBarController.selectedViewController = myViewController

অবশ্যই আপনাকে অবশ্যই নিশ্চিত করতে হবে, এটি myViewControllerসত্যিকারের তালিকায় রয়েছে tabBarController.viewControllers


আমার আরও নতুন কন্ট্রোলার নির্বাচন করা দরকার এবং যতদূর আমি জানি এটি করার একমাত্র উপায়
ওসির

9

আপনি কেবলমাত্র selectedIndexUITabBarController এ যথাযথ সূচকে সেট করতে পারেন এবং ব্যবহারকারী ট্যাব বোতামটি ট্যাপ করার মতোভাবে দৃশ্য পরিবর্তন করা হবে।


6
একটি ছোট পার্থক্যের সাথে ডেলিগেট পদ্ধতিটি যা ব্যবহারকারীদের স্যুইচিং ট্যাব সম্পর্কে অবহিত করতে পারে তা বলা হয় না।
ব্র্যাড অ্যাপ অ্যাপ্লিকেশন

3
সেটিং selectedIndexএছাড়াও সূচী> 4 দিয়ে আমার জন্য কাজ করে না, তবে selectedViewControllerতা করে।
বাগগাফ

3

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

for (UINavigationController *controller in self.tabBarController.viewControllers)
{
    if ([controller isKindOfClass:[MyViewController class]])
    {
        [self.tabBarController setSelectedViewController:controller];
        break;
    }
}

2

আপনি যে ট্যাবগুলি সরিয়ে নিতে পারেন সে ক্ষেত্রে এখানে কিছু কোড রয়েছে।

for ( UINavigationController *controller in self.tabBarController.viewControllers ) {
            if ( [[controller.childViewControllers objectAtIndex:0] isKindOfClass:[MyViewController class]]) {
                [self.tabBarController setSelectedViewController:controller];
                break;
            }
        }

2

স্টুয়ার্ট ক্লার্কের সমাধানটি পছন্দ তবে সুইফট 3 এর জন্য:

func setTab<T>(_ myClass: T.Type) {
    var i: Int = 0
    if let controllers = self.tabBarController?.viewControllers {
        for controller in controllers {
            if let nav = controller as? UINavigationController, nav.topViewController is T {
                break
            }
            i = i+1
        }
    }
    self.tabBarController?.selectedIndex = i
}

এটি এর মতো ব্যবহার করুন:

setTab(MyViewController.self)

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

if let controller is T {

লুপিং, কোন গৌণ কন্ট্রোলার ছাড়া: func selectViewController <ViewControllerModel> (টাইপ: ViewControllerModel.Type) {self.selectedViewController = self.viewControllers .first (যেখানে: {viewController মধ্যে viewController ViewControllerModel} হয়)?}
dev_exo

1

আমি কীভাবে ট্যাবটি সূচীর চেয়ে শ্রেণীর দ্বারা দেখানো হয়েছে তা নির্দিষ্ট করতে সক্ষম হতে চেয়েছিলাম কারণ আমি মনে করি এটি একটি দৃ solution় সমাধানের জন্য তৈরি হয়েছে যা আপনি কীভাবে আইবি ওয়্যার করবেন তার উপর নির্ভরশীল নয় less আমি কাজ করার জন্য ডিসকো বা জোপেডের সমাধানগুলি খুঁজে পাই নি তাই আমি এই পদ্ধতিটি তৈরি করেছি:

-(void)setTab:(Class)class{
    int i = 0;
    for (UINavigationController *controller in self.tabBarContontroller.viewControllers){
        if ([controller isKindOfClass:class]){
            break;
        }
        i++;
    }
    self.tabBarContontroller.selectedIndex = i;
}

আপনি এটিকে এভাবে বলেছেন:

[self setTab:[YourClass class]];

আশা করি এটি কারও সহায়ক হবে


এটি দুর্দান্ত কাজ করেছে! আমি অন্য উত্তরে সুইফট 3 এর জন্য এটি আবার লিখেছিলাম।
জেসন

1

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

tabBarController.selectedIndex = 2

তবে এটি যখন ২ য় ট্যাববারের হোম পৃষ্ঠায় স্যুইচ করা হয় তখন সামগ্রীটি অদৃশ্য থাকে। এবং আমি যখন ডিবাগ করি, ভিডিড অ্যাপায়ার, ভিউউইলঅপায়ার, ভিউডিডলড, তাদের কোনওটিকেই ডাকা হয় না। আমার সমাধানগুলি ইউআইটিববারকন্ট্রোলারে নিম্নলিখিত কোড যুক্ত করা হয়:

override var shouldAutomaticallyForwardAppearanceMethods: Bool 
{
    return true
}

0

AppDelegate.mফাইলে ব্যবহার করুন:

(void)tabBarController:(UITabBarController *)tabBarController
 didSelectViewController:(UIViewController *)viewController
{

     NSLog(@"Selected index: %d", tabBarController.selectedIndex);

    if (viewController == tabBarController.moreNavigationController)
    {
        tabBarController.moreNavigationController.delegate = self;
    }

    NSUInteger selectedIndex = tabBarController.selectedIndex;

    switch (selectedIndex) {

        case 0:
            NSLog(@"click me %u",self.tabBarController.selectedIndex);
            break;
        case 1:
            NSLog(@"click me again!! %u",self.tabBarController.selectedIndex);
            break;

        default:
            break;

    }

}

0

স্টুয়ার্ট ক্লার্কের সমাধানের মতো তবে সুইফ্ট 3 এর জন্য এবং সঠিক ট্যাবটি সন্ধানের জন্য পুনরুদ্ধার শনাক্তকারী ব্যবহার করে:

private func setTabById(id: String) {
  var i: Int = 0
  if let controllers = self.tabBarController?.viewControllers {
    for controller in controllers {
      if let nav = controller as? UINavigationController, nav.topViewController?.restorationIdentifier == id {
        break
      }
      i = i+1
    }
  }
  self.tabBarController?.selectedIndex = i
}

এটি এর মতো ব্যবহার করুন ("হিউম্যানস" এবং "রোবটস" অবশ্যই নির্দিষ্ট ভিউকন্ট্রোলারের জন্য স্টোরিবোর্ডে সেট করতে হবে এবং এটি পুনরুদ্ধার আইডি, বা স্টোরিবোর্ড আইডি ব্যবহার করুন এবং "স্টোরিবোর্ড আইডি ব্যবহার করুন" পুনরুদ্ধার আইডি হিসাবে পরীক্ষা করুন):

struct Tabs {
    static let Humans = "Humans"
    static let Robots = "Robots"
}
setTabById(id: Tabs.Robots)

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

if controller.restorationIdentifier == id {

0
import UIKit

class TabbarViewController: UITabBarController,UITabBarControllerDelegate {

//MARK:- View Life Cycle

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

//Tabbar delegate method
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    let yourView = self.viewControllers![self.selectedIndex] as! UINavigationController
    yourView.popToRootViewController(animated:false)
}



}

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