将UILabel的值从FirstView传递到Tabbar应用程序上的SecondView

时间:2013-04-30 11:01:13

标签: ios uilabel uitabbar tabbarcontroller

我正在尝试制作一个从气象站获取数据的应用程序。它是一个基于tabbar的应用程序。 我有两个viewcontrollers:FirstViewController和SecondViewController。

在FirstViewController中,我正在完成大部分工作。使用来自xml解析的值并将这些值分配给UILabels。这工作正常。 我正在使用if()以便根据其角度为UILabel指定风的名称,如:

在我的FirstViewController.m

-(void)setWindDirectionName 
{    
   if(windDirectionAngle >= 0 && windDirectionAngle <=11.25f) labelWindDirectionName.text = @"N";
   if(windDirectionAngle > 11.25f && windDirectionAngle <=33.75f) labelWindDirectionName.text = @"NNE";
   if(windDirectionAngle > 33.75f && windDirectionAngle <= 56.25f) labelWindDirectionName.text = @"NE";
   if(windDirectionAngle > 56.25f && windDirectionAngle <=78.75f) labelWindDirectionName.text = @"ENE";
   if(windDirectionAngle > 78.75f && windDirectionAngle <=101.25f) labelWindDirectionName.text = @"E";
   .
   .
   . so on

在SecondViewController 中我有UILabel并希望它从 FirstViewController 中获取 labelWindDirectionName.text 的值。

我的SecondViewController.h

 @interface SecondViewController : UIViewController <CLLocationManagerDelegate>
 {
    NSString *windName;
  }
  @property (strong,nonatomic) NSString *windName;
  @property (strong, nonatomic) IBOutlet UILabel *labelCompassViewWindDirectionName;

  @end

,在SecondViewController.m中

 FirstViewController *fvc = [[FirstViewController alloc]init]; 
 windName = fvc.labelWindDirectionName.text;
 labelCompassViewWindDirectionName.text = windName;//getting null probably making completely new  object;

如何将数据(UILABEL.TEXT)传递到基于tabbar的应用程序中的另一个视图?我哪里弄错了? 感谢

3 个答案:

答案 0 :(得分:1)

在您的代码中

FirstViewController *fvc = [[FirstViewController alloc]init]; 

您正在分配FirstViewController的新实例,因此它将返回null。如果您需要访问这些名称,那么您可以将其存储在NSUserDefaults中,然后可以在任何需要的地方访问。

Ex:在FirstViewController中: 将姓名和其他人保存为:

    [[NSUserDefaults standardUserDefaults] setObject:labelWindDirectionName.text forKey:@"windName"];//Note : Here windName is a key so you can save diffrent data using diffrent keys and same way can access those data using these keys whereever you require.
    [[NSUserDefaults standardUserDefaults] synchronize];

并且要在SecondViewController中访问,请使用此

labelCompassViewWindDirectionName.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"windName"];

希望它对你有所帮助。

答案 1 :(得分:1)

获取您的viewController对象Correclty并放置

 FirstViewController *fvc = (FirstViewController *)[self.navigationController.viewControllers objectAtIndex:([self.navigationController.viewControllers count] -1)];
fvc.labelWindDirectionName.text = @"Something";

如果您在同一个标​​签页中按下一个视图控制器,则继续使用该方法。 既然你说过previousController ..所以,试试这个会有所帮助

如果您愿意,可以使用TabBar

for(id object in [(UINavigationController *)self.tabBarController.selectedViewController viewControllers])
{
   if([object isKindOfClass:[FirstViewController class]])
    {
          FirstViewController *obj = (FirstViewController * ) object;
          obj.labelWindDirectionName.text = @"Something";
          break;
     } 
}

答案 2 :(得分:0)

尝试将SecondViewController的NSString属性设置为所需的值,然后在SecondViewController的viewDidLoad方法中使用此属性的值设置标签文本。