将数据传递到选项卡视图控制器内的导航控制器

时间:2013-07-17 22:08:35

标签: ios uinavigationcontroller uitabbarcontroller

我对iOS开发很陌生。

我在标签栏控制器中的视图之间传递数据时遇到问题。

ViewController // First tab in the tab bar with a number pad for entering numbers into a label
SongController // Second tab embed within a Navigation Controller searches database for number entered in the first tab and displays lyrics in a web view

我试图将ViewController中标签的值传递给SongController中的方法。

ViewController.m

- (IBAction)goButton:(id)sender {

int songNum = [self.numberLabel.text intValue];

NSString *songNumber = [NSString stringWithFormat:@"%d",songNum];

if ([songNumber  isEqual: @"0"] || [songNumber isEqual: @""]) {

    [self.numberLabel setText:@""];

    UIAlertView *songNotFound = [[UIAlertView alloc]
                          initWithTitle: @"Sorry"
                          message: @"This song could not be found."
                          delegate: nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
    [songNotFound show];
}
else
{        
    NSLog(@"%@", songNumber);

    SongController *sing = [[SongController alloc]init];

    sing.songNumberFromChooser = songNumber;

    self.tabBarController.selectedIndex = 1;
}

songFromNumberChooser中的NSString SongController未被更改。我做错了什么?

4 个答案:

答案 0 :(得分:0)

看起来你实际上并没有在标签之间传递数据。最好的方法是使用委托模式。我先让你先阅读this tutorial。如果有些东西仍然不起作用,我们可以一起破解它。

答案 1 :(得分:0)

这不起作用的原因是因为您正在创建SongController的新实例,而不是将值分配给已在标签栏控制器中实例化的SongController。

而是尝试这个来获得你已经创建的那个:

SongController* sing = self.tabBarController.viewControllers[1];

sing.songNumberFromChooser = songNumber;

self.tabBarController.selectedIndex = 1;

答案 2 :(得分:0)

您正在创建SongController的新实例,而您应该做的是访问由UITabBarController管理的现有实例,并在该控制器上设置songNumberFromChooser

答案 3 :(得分:0)

我使用NSUserDefaults更改了NSString值。

- (IBAction)goButton:(id)sender {
   .....
}
else
{        
    [[NSUserDefaults standardUserDefaults] setObject:songNumber forKey:@"number"];
    [[NSUserDefaults standardUserDefaults]synchronize];

然后在SongController

的viewWillAppear方法中检索它
- (void)viewWillAppear:(BOOL)animated
{
    songNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"number"];
}