簡體   English   中英

在Storyboard中創建的TabbarController無法以編程方式更改視圖

[英]Created TabbarController in Storyboard can't change view programmatically

創建了一個tabbarcontroller作為splitview控制器的詳細視圖。 我可以通過單擊模擬器上的item1item2圖標來更改視圖,但是不能以編程方式更改視圖。

當嘗試在nslog打印viewcontrollers時,我得到的是null 在MasterView中:

@property (strong, nonatomic) TabBarRootViewController *detailViewController;
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.detailViewController=[[TabBarRootViewController alloc] init];
//tried also
self.detailViewController = (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1];

}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //this sends object info to detail
    if (indexPath.section==0) {
        //send row number
       NSNumber *i = [NSNumber numberWithInteger:indexPath.row];
        NSLog(@"Selected index %@",i);

        self.detailViewController.detailItem = i;
    }
}

詳細信息(標簽):

@property (strong, nonatomic) id detailItem;

if (self.detailItem) {
    NSInteger i=[self.detailItem integerValue];
    NSLog(@"recieved integer is %i",i);

    //tried this
    self.tabBarController.selectedIndex=i;
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:i];

    //list of viewcontrollers
    NSArray *array;
    array = [[self tabBarController] viewControllers];
    NSLog(@"array %@",array);

}

在此處輸入圖片說明

NSLOG:
recieved integer is 1
array (null)

如何以編程方式更改視圖?

謝謝,

小號

看起來您的標簽欄控制器為nil 也許未正確鏈接到情節提要?

您需要在當前控制器上使用performSegueWithIdentifier:sender:

這是因為您的控制器現在由情節提要板控制,並且必須保持狀態等。

請注意,您需要在情節提要編輯器中為Segue提供一個ID,並且不能使用自己的init,而是必須重寫prepareForSegue:sender:來注入屬性。

祝好運。

該問題無法獲得指向Tabbar控制器的確切指針。

我刪除了導航控制器,只留下了[topcontroller]控制器。還刪除了主視圖和appdelegate中的[topcontroller]請求。

所以最終的工作代碼是

代理:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    return YES;
}

masterview:-(void)viewDidLoad

{
    [super viewDidLoad];

    self.detailViewController = (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1];

}

在tabbarcontroller中(詳細信息控制器)

@property (strong,nonatomic) UITabBarController *rootController;

        self.rootController= (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1];
        self.rootController.selectedIndex=i;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM