我有两个控制器,First- and SecondViewController
。我想分享FirstViewController的一些方法,以便在我的SecondViewController中使用它们。
这是我在FirstViewController中创建SecondViewController的方法:
sms = [[SecondViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:sms];
[self presentModalViewController:navController animated:YES];
我想过将FirstViewController的当前实例传递给扩展UIViewController
的SecondViewController。默认情况下,调用SecondViewController的initWithNibName方法。
我如何在objective-c中实现这一目标?
答案 0 :(得分:3)
我不完全确定我理解这个问题......因为问题的一部分与你如何实例化SecondViewController ...发布代码可以帮助。
但要回答你的问题,因为你问过它......“如何将FirstViewController传递给SecondViewController”......
在你的SecondViewController.h中创建自己的init方法
-(id) initWithFirstViewController:(UIViewController *)theFirstViewController;
并在.m文件中...
-(id) initWithFirstViewController:(UIViewController *)theFirstViewController
{
self = [super initWithNibName:@"myNibName" bundle:nil];
self.firstViewController = theFirstViewController; //this assumes you have created this property. Also, do NOT retain the first view controller or you will get circular reference and will secondviewcontroller will leak.
return self;
}
然后..这里是关键..确保你调用正确的init方法来实例化SecondViewContoller
SecondViewController *svc = [[SecondViewController alloc]initWithFirstViewController:self];
现在......说过......看看你的SO评级,我有一种感觉你已经知道了......真正的问题可能是......为什么当你没有明确地调用它时会调用initWithNibName ?
答案 1 :(得分:1)
不是100%肯定你在追求什么。关于共享方法的问题的内容似乎与在init中传入参数的问题不匹配。
关于方法,您可以从parentViewController
调用方法if ([self.parentViewController respondsToSelector:@selector(someMethod)]) {
[self.parentViewController someMethod];
}
如果要在init
的任何类中传递参数,您将需要使用所需的任何其他参数编写自定义init
方法。该自定义方法应以适当的[self init]
调用开始。您甚至可以使用多种自定义init
方法。
以下是下载json或xml feed的类的示例。
- (id)initWithID:(NSString *)useID delegate:(id)setDelegate urlString:(NSString *)urlString feedIsJSON:(BOOL)feedIsJSON failedRetrySecondsOrNegative:(float)failedRetrySecondsOrNegative refreshSecondsOrNegative:(float)refreshSecondsOrNegative {
if ((self = [super init])) {
// Custom initialization
processing = NO;
self.delegate = setDelegate;
self.feedID = [NSString stringWithFormat:@"%@", useID];
self.feedURLString = [NSString stringWithFormat:@"%@", urlString];
self.isJSON = feedIsJSON;
if (failedRetrySecondsOrNegative>=0.0f) {
retryFailedSeconds = failedRetrySecondsOrNegative;
} else {
retryFailedSeconds = kFailedRefresh;
}
if (refreshSecondsOrNegative>=0.0f) {
refreshSeconds = refreshSecondsOrNegative;
} else {
refreshSeconds = kSuccededRefresh;
}
}
return self;
}
希望这有帮助。