我是新手,因为我来自C ++和Perl背景。试图从书中学习,但他们缺少Objective-C的一些核心概念。我需要一些关于此代码的帮助来提取网页:
RootViewController.m
- (void)fetchWebsite:(NSString*)website{
NSLog(@"address: %@", website);
NSString *urlAddress = website;
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webImageDisplay loadRequest:requestObj];
[webImageDisplay release];
}
- (void)viewDidLoad {
[self fetchWebsite:@"website here"];
[super viewDidLoad];
}
这段代码工作正常,但我遇到的问题是从另一个类调用此方法,如下面的代码:
我正在从第二个视图控制器调用详细视图控制器,如下所示:
SubViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.
switch (indexPath.row) {
case 0: {
AnotherViewController *cViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil];
cController.contentSizeForViewInPopover = CGSizeMake(320, 350);
[self.navigationController pushViewController:cViewController animated:YES];
[cViewController release];
break;
}
case 1: {
break;
}
}
}
然后我有一个第三视图控制器,其中包含我想要在webview上显示的新网页的链接。当我在这里调用方法来访问RootViewController中的函数时,它似乎没有响应。
AnotherViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *itemRequested = [conusItems objectAtIndex:indexPath.row];
NSLog(@"logging: %@", itemRequested);
RootViewController *parent = [[RootViewController alloc] init];
[parent fetchWebsite:@"another website here"];
[itemRequested release];
}
我单击表视图上的按钮,我看到在带有NSLog的RootViewController中调用了代码,但它似乎没有显示新页面。没有错误或警告,任何想法?谢谢
答案 0 :(得分:1)
如果可以的话,如果您将Web视图旋转为自己的视图控制器,那么您的生活将更加轻松,您的应用程序将更加灵活。
真正的问题是您没有导航到您的Web视图控制器(您可能没有正确初始化它。)
有可能代码看起来更像这样:
MyWebViewController *webVC = [[MyWebViewController alloc] initWithNibName:@"MyWebViewContorller" bundle:nil];
webVC.address = @"whatever";
[self.navigationController pushViewController:webVC animated:YES];
[webVC release];
答案 1 :(得分:0)
这里有一些值得注意的事情。
MenuItemOrderVC *vc = [[MenuItemOrderVC alloc] initWithNibName:@"MenuItemOrderVC" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
[vc release];
这将创建视图控制器类的新实例,并通过推送到导航控制器的堆栈来呈现它。这是显示详细视图的常用方法。
如果您要做的事情确实存在于已经存在的不同视图控制器上的数据(此时是隐藏的?),那么您不应该分配新的RootViewController(给定名称,您可能不应该创建多个,通常“根”视图控制器是VC堆栈的基础,整个应用程序中只存在一个,但这不是一个硬性规则)。相反,您需要一种方法来获取指向已有的RootViewController的对象指针。
您需要将ViewView中的RootViewController对象传递给ViewController,或者将其放在一个全局可访问的位置,就像在您的app delegate子类中一样,并执行以下操作:
MyAppDelegate *appDel = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
RootViewController *rvc = appDel.rootViewController;
如果您可以评论您正在考虑的这两个选项中的哪一个,我可以提供更直接的答案。