使用Storyboard和Monotouch手动向UITabController添加更多选项卡

时间:2011-11-21 14:43:34

标签: xamarin.ios storyboard uitabcontroller

我目前正在使用新的iOS 5 Storyboard方法来创建带有Monotouch的Tabbed应用程序。我在Xcode中使用Storyboard开发了两个标签视图,并将它们适当地链接到标签栏控制器。我还想开发(在Xcode中)第三个选项卡视图,它将在另外两个选项卡之间共享。我想重复使用相同的布局,但根据选择的选项卡显示不同的数据(想想像“热门”和“最近”这样的布局具有相同的布局但不同的数据)。

为此,我想我可以在添加Storyboard驱动的标签后手动添加标签两次。如何使用Storyboard方法执行此操作?我不确定代码在哪里这样做,因为Storyboard的加载似乎非常透明(即我看到的AppDelegate中没有代码)。或者,是否有另一种(更简单/更好)的方式使用Storyboard方法在两个选项卡之间共享视图?

1 个答案:

答案 0 :(得分:0)

我不知道Monotouch,但这是我在Objective-c中的表现。我没有找到关于这个主题的任何内容,所以如果出现问题,请发表评论:)顺便说一下,我正在使用ARC,所以我不会手动管理内存!我需要实现的是像你一样,有一个标签栏,加载相同的viewController,但为每个标签加载不同的数据。

<强> AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    UITabBarController *root = (UITabBarController*)self.window.rootViewController;

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

    TeamViewController *home = [[mainStoryboard instantiateViewControllerWithIdentifier:@"Team"] initHome];
    TeamViewController *visitor = [[mainStoryboard instantiateViewControllerWithIdentifier:@"Team"] initVisitor];

    [root setViewControllers:[NSArray arrayWithObjects:home, visitor, nil] animated:NO];

    UITabBar *tabs = root.tabBar;
    UITabBarItem *homeTab = [tabs.items objectAtIndex:0];
    UITabBarItem *visitorTab = [tabs.items objectAtIndex:1];

    homeTab.title = @"Home team";
    visitorTab.title = @"Visitor team";

    return YES;
}

当我加载两个initHome时,您可以看到我致电initVisitorTeamViewController,以下是相关代码。

<强> TeamViewController.h

@interface TeamViewController : UIViewController
{
    enum
    {
        HOME,
        VISITOR
    };

    int team;
}

<强> TeamViewController.m

- (id)initHome
{
    team = HOME;

    return self;    
}

- (id)initVisitor
{
    team = VISITOR;

    return self;    
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    if(team == HOME)
    {
        label.text = @"home data";
    }
    else if(team == VISITOR)
    {
        label.text = @"visitor data";
    }
}

我不知道你能把它转化为你的项目有多好,但我希望你能全面了解它:)

如果您需要了解如何使用故事板访问第一个视图控制器:http://developer.apple.com/library/ios/#releasenotes/Miscellaneous/RN-AdoptingStoryboards/_index.html#//apple_ref/doc/uid/TP40011297 有一个名为“访问第一个视图控制器”的部分