我正在尝试制作一个从气象站获取数据的应用程序。它是一个基于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的应用程序中的另一个视图?我哪里弄错了? 感谢
答案 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方法中使用此属性的值设置标签文本。