Как загрузить веб-страницу с помощью didSelectRowAtIndexPath, не выходя из приложения? - PullRequest
3 голосов
/ 21 апреля 2011

Я анализирую RSS-каналы и загружаю результаты в таблицу. Когда пользователь нажимает на историю, они попадают на веб-страницу.

На данный момент я использую:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:story]];

Проблема в том, что это запускает Safari и закрывает мое приложение.

Есть ли способ открыть веб-страницу в моем приложении, так сказать? Мне бы хотелось, чтобы веб-страница отображалась с кнопкой «Готово», которая закрывает веб-страницу и возвращает пользователя обратно в таблицу.

Любая помощь (и примеры кода) очень ценится.

1 Ответ

3 голосов
/ 21 апреля 2011

Вы можете использовать UIWebView в новом контроллере представления, запущенном с помощью селектора pushViewController navigationController, и иметь элемент панели инструментов для «Просмотр в Safari», который запустит полный браузер Safari (и поместит ваше приложение в фоновый режим / завершит работу).

Некоторые примеры фрагментов кода:

Предположения: (1) У вас есть контроллер представления, озаглавленный: WebViewController (с тем же .xib) файлом. (2) Этот контроллер представления имеет UIView, который является подпредставлением основного вида;

@interface WebViewController: UIViewController <UIWebViewDelegate> {
    UIWebView *webview;
    NSString *someUrlToLoad;
}

@property (nonatomic, retain) IBOutlet UIWebView *webview;
@property (nonatomic, copy) NSString *someUrlToLoad;

В этом представлении метод viewDidLoad контроллера:

-(void) viewDidLoad {
    [super viewDidLoad];
    [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.someUrlToLoad]]];
}

Вы загружаете этот контроллер, когда кто-то нажимает на ячейку в вашем табличном представлении:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    WebViewController *viewController = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:nil];
    viewController.someUrlToLoad = <url for this cell>;
    [self.navigationController pushViewController:viewController animated:YES];
    [viewController release];

}

Скорее всего, вы захотите включить некоторый хук в UIWebViewDelegate, чтобы остановить / показать индикатор активности на панели навигации, чтобы пользователь знал, что что-то происходит во время загрузки страницы.

...