0

我有一个 TabBarController,它在启动时设置了多个 ViewController。当用户单击按钮时,我想将它们发送到 TabBarController 中的不同 ViewController,并通过委托传递数据。

我有一个协议和委托设置。但是,什么时候设置委托,因为所有的 ViewControllers 都在 TabBarController

这可能吗,当用户单击按钮时,如何将数据传递给 TabBar 中的另一个 ViewController。任何想法,我真的很想使用代表。

- (IBAction)sendData:(id)sender
{
    [self.delegate setStringData:strData];
    self.tabBarController.selectedIndex = 0;
}

编辑:

因此,假设我有一个 TabBarController,其中包含两个 ViewController,分别称为 ViewControllerOne 和 ViewControllerTwo。

我将 ViewControllerTwo 设置为委托和协议。这是按下按钮后将向 ViewControllerOne 发送数据的 ViewController。ViewControllerOne 实现协议并包含方法 setStringData 应在 ViewControllerTwo 中的按钮被按下后调用。

4

2 回答 2

0

从 UIViewController 你想更改选定的标签栏索引并传递数据。我建议您为此在应用程序委托中添加一个功能。这样你的 UIViewController 就不会与 UITabBar 绑定(如果明天你想使用不同的 UI 习惯,你只需要在你的应用程序委托中更改你的函数的实现)。

要传递数据,您可以尝试在您的函数中进行自省:您获取新选定选项卡索引的当前 UIViewController,验证它是否响应您的选择器并调用该函数。

编辑 :

假设您“只是”必须更改选定的 tabBar 索引(例如,您的 UIViewController 在新的 tab bar 索引上将始终相同)。

在您的第一个视图控制器中:

    - (IBAction)sendData:(id)sender
    {
        UIApplicationDelegate * appDelegate = [[UIApplication sharedApplication] 委托];
        if ([appDelegate respondToSelector:@selector(goToFirstTabBarWithData:)])
        {
            [appDelegate performSelector:@selector(goToFirstTabBarWithData:) withObject: strData];
        }
    }

在您的 Appdelegate 中:

    - (void)goToFirstTabBarWithData:(NSString *)data
    {
        self.tabBarController.selectedIndex = 0;
        UIViewController * vc = [self.tabBarController.viewControllers objectAtIndex:0];
        if ([vc respondToSelector:@selector(setStringData:)])
        {
            [vc performSelector:@selector(setStringData:) withObject:data];
        }
    }

在您的第二个视图控制器(您将到达的那个)中:

    - (void)setStringData:(NSString *)data
    {
        // 做点什么...
    }
于 2012-04-22T18:03:39.500 回答
0

我找到了一个更简单的解决方案来解决我的问题。在 ViewControllerTwo 内部,我只是创建了一个 ViewControllerOne 的实例并将我需要的数据传递给它。然后我将 tabBarController 索引更改为 ViewControllerOne。

例如:

// A method inside of ViewControllerTwo
ViewController *viewcontrollerOne = [ViewcontrollerOne alloc] init];
[viewcontrollerOne setStringData:str];
[viewcontrollerOne release];
self.tabBarController.selectedIndex = 0;  
于 2012-04-24T00:42:46.173 回答