Как уже сказано, общая идея заключается в том, чтобы иметь собственность на FirstViewController, который хранит URL, необходимый для загрузки, а затем загрузить URL в UIWebView, когда появится вид.
Вот пример того, что это может выглядеть, начиная с заголовка:
@interface FirstViewController : UIViewController {
UIWebView *webView;
NSURL *storyURL;
}
@property (nonatomic, retain) IBOutlet UIWebView *webView; // this is set up in your nib
@property (nonatomic, retain) NSURL *storyURL;
@end
Теперь для реализации:
@implementation FirstViewController
@synthesize webView;
@synthesize storyURL;
- (void)dealloc;
{
[storyURL release]; // don't forget to release this
[super dealloc];
}
- (void)viewDidAppear:(BOOL)animated;
{
// when the view appears, create a URL request from the storyURL
// and load it into the web view
NSURLRequest *request = [NSURLRequest requestWithURL:self.storyURL];
[self.webView loadRequest:request];
}
- (void)viewWillDisappear:(BOOL)animated;
{
// there is no point in continuing with the request load
// if somebody leaves this screen before its finished
[self.webView stopLoading];
}
@end
Так что теперь все, что вам нужно сделать в контроллере для предыдущий вид - получить URL-адрес истории, передать его FirstViewController и нажать на него.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *story = [stories objectAtIndex:[indexPath row]];
NSURL *storyURL = [NSURL URLWithString:[story objectForKey:@"link"]];
FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:[NSBundle mainBundle]]; // I'm pretty sure you don't need to pass in the main bundle here
firstViewController.storyURL = storyURL;
[self.navigationController pushViewController:firstViewController animated:YES];
[firstViewController release]; // don't leak memory
}
И вот об этом. Несколько моментов:
Я предполагаю, что «ссылка» значение в словаре уже строка - построение новой строки в оригинальном примере, не требуется, если это так. Как вы можете видеть в моем примере, мы можем использовать эту строку непосредственно для создания экземпляра NSURL
.
В исходном коде, когда вы назначаете/инициализируете свой FirstViewController, вы передаете это прямо в pushViewController
. Это создает утечку памяти, так как после этого выполняется UINavigationController
(после того, как он соскользнется со стека навигации), счетчик будет по-прежнему равен 1. По крайней мере, вы должны позвонить autorelease
, но самая эффективная вещь здесь - просто выделить/запустите его, сохраните в переменной temp, затем вызовите release
прямо после того, как мы его нажали. Это гарантирует, что после того, как он будет удален из навигационного стека, он будет освобожден.
Удивительное объяснение - большое спасибо! –
Я бы выполнил 'loadRequest' во время' viewDidLoad', а не 'viewDidAppear' - в противном случае вы будете продолжать перезагружать страницу, если, например, у вас есть контроллер табуляции, который может включать и выключать просмотр. –
Для изучения, Могу ли я получить загружаемое примерное приложение, чтобы увидеть в XCode для вышеперечисленного? – testndtv