#iphone #uitableview #sdk #safari #webpage
#iPhone #uitableview #sdk #safari #HTML
Вопрос:
Я анализирую RSS-каналы и загружаю результаты в таблицу. Когда пользователь нажимает на историю, он попадает на веб-страницу.
На данный момент я использую:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:story]];
Проблема в том, что при этом запускается Safari и закрывается мое приложение.
Есть ли способ открыть веб-страницу, так сказать, в моем приложении? Я бы хотел, чтобы веб-страница отображалась с кнопкой «Готово», которая закрывает веб-страницу и возвращает пользователя обратно в таблицу.
Мы высоко ценим любую помощь (и примеры кода).
Ответ №1:
Вы можете использовать UIWebView в новом контроллере просмотра, запущенном с помощью NavigationController pushViewController selector, и иметь элемент панели инструментов для «Просмотра в 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 контроллера viewDidLoad:
-(void) viewDidLoad {
[super viewDidLoad];
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.someUrlToLoad]]];
}
Вы загружаете этот контроллер, когда кто-то нажимает на ячейку в вашем tableview:
- (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, чтобы остановить / показать индикатор активности на панели навигации, чтобы пользователь знал, что что-то происходит во время загрузки страницы.
Комментарии:
1. Спасибо chilitechno. Я немного новичок, поэтому ваша рекомендация немного сбивает с толку. Переключится ли это в новую строку или создаст вложенное представление, которое будет перекрывать таблицу? Мне нужно показать только одну веб-страницу (по одной на каждую строку таблицы), поэтому мне не нужны все возможности Safari. Есть шанс, что вы могли бы опубликовать какой-нибудь пример кода? Большое спасибо.
2. Обновил ответ некоторыми примерами фрагментов. Я рекомендую загрузить новый контроллер просмотра с содержимым, чтобы пользователь мог нажать кнопку «Назад», когда они закончат просмотр содержимого веб-страницы.
3. будьте осторожны с тем, что вы отображаете ВНУТРИ webview вашего приложения. существуют некоторые ограничения относительно того, что вы можете показывать. например: вы должны показать любую страницу «пожертвования» в самом приложении safari, используя
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:story]];
указанную вами функцию. вероятно, вам не о чем беспокоиться, но просто знайте, что на это есть некоторые ограничения