一个对象可以在另一个视图控制器中看到吗?

时间:2013-05-29 13:16:40

标签: objective-c cocoa-touch

随着时间的推移掌握Obj-C,这很好!

所以,我将使用我试图从中学习的例子。我正在使用选项卡式视图控制器。我在页面上有一个UIButton,它会显示如下的新视图:

FilterViewController *ctrl = [[FilterViewController alloc] init];

[UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];

self.filterViewController = ctrl;

[self.navigationController pushViewController:self.filterViewController animated:NO];

现在,假设我创建了一个名为TimeFilter的类,并在FirstViewController中初始化它

TimeFilter *timeFilter = [[TimeFilter alloc] init];
[timeFilter saveTime:1300];

在FilterViewController中,我可以这样做:

int timeSelected;
timeSelected = [timeFilter getTime];

我试图了解对象在应用程序中的工作方式,而不是命令行工具。

非常感谢!!

2 个答案:

答案 0 :(得分:2)

是的,你可以做这样的事情,你必须采取行动:

1)你可以使用那些方法-class方法,因此,你不需要创建对象。

+(id)getTime

并从任何地方拨打电话

[TimeFilter getTime];

2)你可以让TimeFilter成为单身人士

+(TimeFilter*)shared
{
   static TimeFilter *kTimeFilter = nil;
   static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
    kTimeFilter = [TimeFilter new];
});   
   return kTimeFilter;
}

并在您的代码调用的任何地方

[[TimeFilter shared] getTime];

答案 1 :(得分:1)

只需在FilterViewController中定义一个属性:

@property (nonatomic, strong) timeFilter;

然后,您可以在展示控件之前将timeFilter分配给FilterViewController

TimeFilter *myTimeFilter = [[TimeFilter alloc] init];
[myTimeFilter saveTime:1300];
FilterViewController *ctrl = [[FilterViewController alloc] init];
ctrl.timeFilter = myTimeFilter;

然后在FilterViewController中你可以这样做:

int timeSelected = [self.timeFilter getTime];

并且不要使用transitionFromView:toView:duration:options:completion:来显示新的视图控制器。实现目标的正确方法是:

ctrl.modalTransitionStyle = UIModalTransitionStylePartialCurl;
[self presentViewController:ctrl animated:YES completion:nil];