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

Posted

技术标签:

【中文标题】使用 Storyboard 和 Monotouch 手动将更多选项卡添加到 UITabController【英文标题】:Manually add more tabs to UITabController with Storyboard and Monotouch 【发布时间】:2011-11-21 14:43:33 【问题描述】:

我目前正在使用新的 ios 5 Storyboard 方法来使用 Monotouch 创建我的选项卡式应用程序。我在 Xcode 中使用 Storyboard 开发了两个选项卡视图,并将它们适当地链接到选项卡栏控制器。我还想开发(在 Xcode 中)第三个选项卡视图,它将在两个附加选项卡之间共享。我想重用相同的布局,但根据选择的选项卡显示不同的数据(想想像“流行”和“最近”这样的布局相同但数据不同的东西)。

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

【问题讨论】:

【参考方案1】:

我不知道 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;

当我加载我的两个TeamViewController 时,你可以看到我调用了initHomeinitVisitor,这是关于它的代码。

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 有一个部分叫做“访问第一个视图控制器

【讨论】:

以上是关于使用 Storyboard 和 Monotouch 手动将更多选项卡添加到 UITabController的主要内容,如果未能解决你的问题,请参考以下文章

使用 AudioQueue 和 Monotouch 静态声音录制

Monotouch:使用标签栏控制器和导航控制器。 AppDelegate 中有哪一个?

MonoTouch 支持 NSFetchRequest 和 NSPredicate

使用 DrawString (MonoTouch) 向 UIImageView 添加文本时遇到问题

使用 TestFlight 时更好的 MonoTouch 崩溃

MonoTouch UIButton、UIPickerView 和覆盖只读 InputView